工厂模式

工厂方法模式同样属于类的创建型模式,又被称为多态工厂模式。工厂方法的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。

核心工厂类不在负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处就是使得工厂方法模式可以使系统不再修改具体工厂角色的情况下引进新的产品。

模式中包含的角色极其职责

抽象工厂角色

工厂方法的核心,任何工厂类都必须实现这个接口

具体工厂角色

具体工厂是抽象工厂的一个实现,负责实例化产品对象。

抽象角色

工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品

工厂方法模式所创建的具体实例对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5uoWJEma-1602171138325)(picture/image-20201008225409185.png)]

工厂模式和简单工厂模式比较

工厂模式与简单工厂模式在结构上的不同不是很明显,工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体的类上。

工厂方法模式之所以有一个别名叫多态型工厂模式是因为具体工厂类都是共同的接口或者有共同的抽象父类。

当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了 - 开放封闭-原则。而简单工厂模式再添加新产品对象后不得不修改工厂方法,扩展性不好。工厂模式退化后可演变成简单工厂模式。

开放-封闭,通过添加代码的方式,不是通过修改代码的方式完成功能的增强

特点 :不需要修改源代码就可以实现新工能的添加

23种设计模式C++源码与UML实现--工厂模式相关推荐

  1. 23种设计模式C++源码与UML实现--外观模式

    外观模式 facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种,facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单界面.这个一致的简单的界面被称为fac ...

  2. 23种设计模式C++源码与UML实现--建造者模式

    建造者模式 代码仓库地址:建造者模式 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建模式之一,用来隐藏复合对象的创建过程.他把 ...

  3. 23种设计模式C++源码与UML实现--迭代器模式

    迭代器模式 Iterator模式也叫迭代模式,是行为模式之一,他把对容器种包含的内部对象的访问委让给外部类,使用Iterator按顺序进行遍历访问的设计模式. 在使用Iterator模式之前,首先应该 ...

  4. 23种设计模式C++源码与UML实现--命令模式

    命令模式 Command模式也叫命令模式,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数. 在面向对象的程序设计中,一个对象调用另外一个对象 ...

  5. 23种设计模式C++源码与UML实现--原型模式

    原型模式 一个复杂对象,具有自我复制功能,统一一套接口. 原型模式主要面对的问题是:某些结构复杂的对象的创建工作,由于需求的变化,这些对象进场面对着剧烈的变化,但是他们却拥有比较一致的接口. 原型模式 ...

  6. 23种设计模式C++源码与UML实现--桥接模式

    桥接模式 Bridge模式,又叫做桥接模式,是构造型的设计模式之一.Bridge模式基于类的最小设计原则,通过使用封装,聚合以及继承等行为让类承担不同的责任.它的主要特点是把抽象(Abstractio ...

  7. 23种设计模式C++源码与UML实现--状态模式

    状态模式 State模式也叫状态模式,是行为模式的一种,State模式允许通过改变对象的内部状态而改变对象的行为,这个对象变现的好像修改了它的类一样. 状态模式主要解决的事当控制一个对象状态的条件表达 ...

  8. 23种设计模式C++源码与UML实现--策略模式

    策略模式 Strategy模式也叫策略模式,是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交给客户端决定. ...

  9. 23种设计模式C++源码与UML实现--组合模式

    组合模式 Composite模式也叫做组合模式,是构造型的设计模式之一.通过递归的手段构造树形的对象结构,并可以通过一个对象来访问整个对象树. Component树形结构的节点抽象 为所有的对象定义统 ...

最新文章

  1. Android之线程池深度剖析
  2. javascript权威指南学习笔记
  3. 利用ListView实现新闻客户端的新闻内容图文混排
  4. 1000亿产值、2500万辆销售目标,范迪塞尔代言的雅迪将如何正确“出海”?
  5. C语言函数怎么像python那样返回多个值?(三种方法:1、设置全局变量 2、传递指针 3、使用结构体返回不同类型的数据)
  6. java 获取js变量类型_JavaScript 的数据类型及其检测
  7. PHP判断远程url是否有效的几种方法
  8. [ThinkPHP]打开页面追踪调试
  9. 简单一码付:将支付宝和微信的收款二维码合并为一个二维码
  10. mobile terminal 笔记
  11. Kotlin如何写脚本
  12. 【VUE项目实战】51、商品添加功能(一)
  13. c语言个人所得税的打印思路,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  14. eclipse的32位和64位版本(亲测有效)
  15. TCP/IP协议栈之LwIP(四)---网络诊断与状态查询(ICMPv4 + ICMPv6)
  16. 手绘动画用哪个软件比较好?分享5个好用的手绘动画软件
  17. 详解I2C(二)时序
  18. 爱的诠释,你懂的!我们都懂的!
  19. MSP430G2553学习
  20. 你们要的面试题来啦!

热门文章

  1. 交换机端口镜像(锐捷)
  2. 团队软件开发第一次冲刺(六)
  3. uva 12508 - Triangles in the Grid(几何+计数)
  4. 装饰器 闭包 生成器 迭代器
  5. mybatis关系映射(1对1,1对多,多对多)
  6. 2015山东信息学夏令营 Day4T3 生产
  7. hdu 3236 二维背包
  8. MSSQL SERVER 2005 数学函数
  9. 6、VTK基本数据结构
  10. Adobe Reader 背景色修改