设计原则

要依赖于抽象,而不是具体类。

工厂方法模式(创建者+产品)

定义了一个创建对象的接口,但是由子类来决定实例化哪个类。工厂方法将类的实例化推迟到了子类。

工厂方法模式能够封装具体类型的实例化,如以下类图,抽象的Creator提供了一个创建对象的方法的接口,也称“工厂方法”。

“由子类来决定实例化哪个类”指在编写Creator时,不需要知道实际创建的产品是哪一个。选择了使用哪个子类,自然决定了实际创建的产品是什么。

抽象工厂模式(可以创建产品的家族)

提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(关心)实际产出的具体产品是什么。

注意:

(1)工厂方法使用继承:把对象的创建委托给子类,子类实现工厂方法来创建对象。

(2)抽象工厂使用对象组合:对象的创建被实现在工厂接口所暴露出来的方法中。

(3)所有工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合。

(4)工厂方法让类将实例化延迟到子类中进行。

(5)抽象工厂创建相关的对象家族,而不需要依赖他们的具体类。

(6)依赖倒置原则,指导我们避免依赖具体类型,而要尽量依赖抽象。

(7)工厂帮助我们针对抽象编程,而不是针对具体类编程。

HeadFirst 设计模式 4工厂模式(披萨店演变)相关推荐

  1. HeadFirst设计模式笔记——工厂模式

    在客户端程序中过多的使用new去实例化就会造成耦合过强的问题.使用工厂模式可以有效地将这些实例化工作抽离到客户程序之外,使程序更多的依赖抽象类而不是具体的类,从而解耦. 简单工厂 简单工厂将同源类的实 ...

  2. 设计模式(5)--三种工厂模式(披萨店)

    工厂方法 工厂方法 Intent 定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个.工厂方法让类把是实例化推迟到子类. 抽象工厂 Intent 提供一个接口,用于创建相关或依赖对象的家族, ...

  3. 设计模式之工厂模式(披萨店案例)

    设计模式之工厂模式(披萨店案例) 披萨类如下: import java.util.ArrayList;public abstract class Pizza {String name;String d ...

  4. 设计模式之工厂模式(三)

    上一次我们已经通过代码,简单的认识了工厂方法模式,具体的思路请移步到设计模式之工厂模式(二),进行查看.这次,让我们通过设计模式的思想,来好好认识下工厂方法模式. 创建者和产品 所有工厂模式都用来封装 ...

  5. java设计模式之工厂模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  6. 策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式

    设计模式之工厂模式-工厂方法模式 大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目. 来源:凯哥Java(kaigejava) 需求: 披萨项目: 要方便披萨品种的扩展.要便于维护.要 ...

  7. java工厂模式 uml_深入浅出设计模式-简单工厂模式

    模式定义 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式定义了一个创建对象的类,由这个类来封装实例化 ...

  8. Java设计模式(工厂模式>抽象工厂模式和原型模式)

    Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...

  9. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  10. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

最新文章

  1. python编程100例画图-python 画图示例源码(Turtle Graphics)
  2. linuxHacks中记载的一些小技巧
  3. 用代码查看SAP Spartacus购物车内的行项目
  4. GitHub仓库项目添加Python语言类别
  5. C++ typedef小结(转载)
  6. C语言之*和++、--连用时的结合性探究
  7. Linux高频命令汇总,高频Linux命令
  8. Vue调用本地缓存(监视数据变更)
  9. 马斯克辞任董事长,罚款2000万美元,钢铁侠一夜服软
  10. python创意实用案例-精心整理!9个 Python 实用案例分享
  11. Vegas如何设置淡入淡出?
  12. 从零基础入门Tensorflow2.0 ----六、29keras_generator读取 kaggle 10 monkeys数据
  13. linux kill 杀一个进程
  14. html音乐播放心得体会,音乐心得体会
  15. hdu 5294 Tricks Device 最短路建图+最小割
  16. java摩托游戏_盘点那些JAVA游戏第3期
  17. intel无线网卡日志服务器,Intel的无线网卡总掉线,慎入
  18. PHP 微信公众号和html5接入微信支付
  19. 垃圾小白羊的leetcode刷题记录7
  20. 2021年全国职业院校技能大赛网络搭建与应用之虚拟化配置答案

热门文章

  1. AI会玩魔方了!全是自学,比任何人都快,包括机器人
  2. 绑定挂载mount --bind介绍
  3. 几款常见接口管理平台对比
  4. 自动化测试平台(十三):接口自动化框架与平台对比及应用场景分析及设计思路分享
  5. Blast 几种方法的具体用法以及含义
  6. java v3格式转换wav格式比特率是13kbps_java 压缩mp3 比特率
  7. PHPUnit 在 Windows下的安装
  8. js 中 spilt 方法
  9. 《黑白团团队》第六次作业:团队项目系统设计改进与详细设计
  10. 以数据为中心的路由协议_腰部零售企业如何以数据中台为中心,加速数字化落地...