简单工厂模式

  • Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。
  • 简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的“消费”和生产完全分开,客户端只需要知道自己需要什么产品,如何来使用产品就可以了,具体的产品生产任务由具体的工厂类来实现。工厂类根据传进来的参数生产具体的产品供消费者使用。这种模式使得更加利于扩展,当有新的产品加入时仅仅需要在工厂中加入新产品的构造就可以了。

优点

  • 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费"产品。简单工厂模式通过这种做法实现了对责任的分割。

缺点

  • 当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。

  • 因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

  • 当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

  • 同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。

  • 另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。

  • 工厂类集成了所有产品的创建逻辑,当工厂类出现问题,所有产品都会出现问题;还有当新增加产品都会修改工厂类,违背开闭原则

本质

选择实现

使用场景

-如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,则可以选用简单工厂。让客户端通过工厂来获取相应的接口,而无需关心具体的实现。

  • 如果想要把对外创建对象的职责集中管理和控制,可以选用简单工厂。

简单工厂模式的构成

  • 工厂类角色Creator (LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象。
  • 抽象产品角色Product (Light):定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象类或接口。
  • 具体产品角色ConcreteProduct (BulbLight, TubeLight):定义工厂具体加工出的对象。
    简单工厂模式的UML

    问题:
    请用C++、Java、C#或VB.NET任意一种面向对象语言实现一个计算器控制台程序,要求输入两个数和运算符号,得到结果。

计算器的简单工厂模式实现代码及UML图

//java语言实现
package Calculator;public abstract class Operation {public double numberA=0;public double numberB=0;public double getNumberA() {return numberA;
}
public void setNumberA(double numberA) {this.numberA = numberA;
}
public double getNumberB() {return numberB;
}
public void setNumberB(double numberB) {this.numberB = numberB;
}public abstract double GetReault();}
===========================================
package Calculator;public class OperationAdd extends Operation {@Overridepublic double GetReault() {double result=0;result=numberA+numberB;return result;}
}
===================================================
package Calculator;public class OperationSub extends Operation {@Overridepublic double GetReault() {double result=0;result=numberA-numberB;return result;}
}
================================================
package Calculator;public class OperationMul extends Operation {@Overridepublic double GetReault() {double result=0;result=numberA*numberB;return result;}}
===================================================
package Calculator;import java.io.IOError;public class OperationDiv extends Operation {@Overridepublic double GetReault() {try{return numberA/numberB;} catch(IOError e){System.out.println("除数不能为0!!!");return 0;}}
}
==============================================================
package Calculator;public class OperationFactory {public static Operation createOperation(char operate){Operation oper=null;switch(operate){case '+':oper=new OperationAdd();break;case '-':oper=new OperationSub();break;case '*':oper=new OperationMul();break;case '/':oper=new OperationDiv();break;}return oper;}
}
=========================================================
package Calculator;
public class Client {public static void main(String[] args) {Operation oper;oper=OperationFactory.createOperation('+');oper.numberA=100;oper.numberB=20;double result=oper.GetReault();System.out.println(result);}}

简单工厂模式--计算器代码及UML图相关推荐

  1. 简单工厂模式(代码实现)

    简单工厂模式简述 工厂模式用于封装和管理对象的创建,是一种创建型模式. 简单工厂模式则是简单的进行封装,再通过工厂创建对象. 一.项目结构 Factory是工厂包,Interface接口包,impl实 ...

  2. 策略与简单工厂模式结合的实现--收银软件的代码及UML图

    策略模式和简单工厂模式的结合:把分支判断放到环境角色中. 解决简单工厂模式中提到的问题: ●关键:分支的switch依然去不掉 ●解决方法:依赖注入.反射.XML 简单工厂模式 策略模式 收银软件的策 ...

  3. 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么

    本文首发于博客园,地址:http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html 一.模式概述 从设计模式的类型上来说,简单工厂模式是 ...

  4. 常用设计模式系列(一)—简单工厂模式

    hello各位程序员大哥大姐好,上期我讲解了设计模式的概念及分类,学习了UML类图的认识,今天我们就趁热打铁,学习一下简单工厂模式,以后每一个模式会出一篇文章,供各位及我自己查阅学习.斗图还是不能忘的 ...

  5. 个人理解简单工厂模式和策略模式的区别

    刚刚接触设计模式的时候,我相信单例模式和工厂模式应该是用的最多的,毕竟很多的底层代码几乎都用了这些模式.自从接触了一次阿里的公众号发的一次文章关于 DDD的使用 以后,就逐渐接触了策略模式.现在在项目 ...

  6. PHP 设计模式系列之简单工厂模式(Simple Factory)

    1.简单工厂模式(Simple Factory)定义 简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类.简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可 ...

  7. C#设计模式--简单工厂模式

    设计模式: 简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不是Gof23种设计模式之一.但它在实际的编程中经常被用到,而且思想也非常简单,下面简单举例说明: 简单工厂 ...

  8. 将简单工厂模式改造应用到项目中,而不是纸上谈兵

    10月26日晚补充:经过掘友的提醒,我才发现之前我这篇所写的策略模式,其本身更偏向于工厂模式,我起初以为是掘友分不清工厂模式和策略模式,实际上是我自己把自己绕进去,看不清工厂模式和策略模式的区别. 因 ...

  9. java圣经_Java设计模式圣经连载(01)-简单工厂模式[转载]

    简单工厂模式是类的创建,又叫静态工厂方法(Static Factory Methord)模式.简单工厂模式是由一个工厂对象决定创造哪一种产品类的实例. 1.1.1 工厂模式的几种形态 工厂模式专门负责 ...

  10. Spring常用设计模式--简单工厂模式

    本专栏内容参考自:咕泡学院Tom老师的<Spring5核心原理与30个类手写实战>,仅作个人学习记录使用,如有侵权,联系速删. 工厂模式的由来:   在现实生活中我们都知道,原始社会自给自 ...

最新文章

  1. TinyCrayon-iOS-SDK:强大到使人惊讶的 Mask 及切图工具库
  2. 运维的shell小编(1)
  3. 转】R利剑NoSQL系列文章 之 Hive
  4. datagridview绑定xml
  5. 将图卷积神经网络用于解码分子生成
  6. [z]Qt 内存管理机制
  7. 三个数互质 java_LeetCode 5198. 丑数 III(Java)容斥原理和二分查找
  8. Flask实现个人博客系统(附源码)
  9. 类加载器详解(自己实现类加载器)
  10. Git, Gitlab使用文档
  11. 关于VS.NET中多个项目的工程相互引用和多个dll引用的问题! - antony--异域空间 - 博客园
  12. 计算机组成原理(4)-中央处理器CPU
  13. java从倒数第n个指定字符串开始截取到最后
  14. K-means聚类、KNN算法原理
  15. crontab 每5秒钟执行一次
  16. 【观察】亚信科技:稳中求进开新局,继往开来创新篇
  17. 校园英语杂志校园英语杂志社校园英语编辑部2022年第17期目录
  18. 关于FIR滤波器的系数
  19. godot切换父节点
  20. Adaptive AUTOSAR 平台接口使用指南

热门文章

  1. sql获取当前时间精确到秒的字符串
  2. 软件观念革命:交互设计精髓_专业科班答案:一个标准的交互设计流程是怎样的?...
  3. 常见的9种前端跨域解决方案详解
  4. php 连接芒果数据库,芒果数据库配置文件
  5. NC65销售订单功能导入
  6. Android 蓝牙AVRCP 专题 (1)----- 手机端设置绝对音量Set Absolute Volume
  7. 微信小程序 java社区团购系统springboot
  8. POI 实现Word替换书签
  9. 使用触发器对学生表操作进行日志记录
  10. 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-9825】-【V4.0 Android-Q-TD1】...