工厂方法模式

define an interface or abstract class for creating an object but let the subclasses decide which class to instantiate.

参考:

  1. refactoringguru | factory-method
  2. javatpoint | factory-method-design-pattern
  3. 博客园| 工厂方法

简单工厂的问题

简单工厂把可能很复杂的对象创建过程分装在工厂类内部,客户端只需要给简单工厂一个“类的标志”,工厂类就能动态返回一个实例化对象,这样的好处是简化了客户端操作,从客户端按说,符合开闭原则,但每次添加新的产品,都需要修改工厂类,添加新的判断逻辑,不符合开闭原则。为了解决简单工厂的这个问题,工厂方法中会先定义一个创建对象的接口或抽象类,然后让子类去决定实例化哪个类。

工厂方法的优点

  1. 客户端只需要知道产品对应的接口即可,无需关心产品的具体实现细节。
  2. 比简单工厂有更好的可拓展性,添加新产品只需要实现接口即可。
  3. 耦合度进一步下降。

适用场景

  1. 如果无法预知对象确切类别及其依赖关系时
  2. 需要将类的实例化过程延迟到其子类时
  3. 工厂方法可以复用创建好的对象来节省资源(缓存)

所有工厂类的接口:

public interface IPhoneFactory {BasePhone createPhone();
}

具体的工厂实现类中实例化产品:

public class HonorFactory implements IPhoneFactory {@Overridepublic BasePhone createPhone() {BaseCPU cpu = new KirinFactory().createCPU();BaseCamera camera = new LeicaFactory().createCamera();return new Honor(cpu, camera);}
}
public class OnePlusFactory implements IPhoneFactory {@Overridepublic BasePhone createPhone() {BaseCPU cpu = new QualcommFactory().createCPU();BaseCamera camera = new SonyFactory().createCamera();return new OnePlus(cpu, camera);}
}

客户端只需要知道相关接口或抽象类即可,无需关心产品细节

public class Consumer {public static void main(String[] args) {BasePhone onePlus = new OnePlusFactory().createPhone();onePlus.printConfig();BasePhone honor = new HonorFactory().createPhone();honor.printConfig();}
}

GitHub | 完整代码

【设计模式 05】工厂方法模式相关推荐

  1. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  2. 设计模式复习-工厂方法模式

     设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...

  3. C#设计模式(3)——工厂方法模式

    一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...

  4. 设计模式之工厂方法模式(创建型)

    一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...

  5. 设计模式之工厂方法模式应用例题

    设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...

  6. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

  7. 【设计模式】工厂方法模式(C#)

    [设计模式]工厂方法模式 1.概述 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则. 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象.工厂方法使一个产品类的实例化 ...

  8. 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例

    文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...

  9. 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)

    文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...

  10. 设计模式之工厂方法模式(Factory Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

最新文章

  1. oracle上浮下浮分析函数_Oracle SQL高级编程——分析函数(窗口函数)全面讲解...
  2. Java RTTI运行时类型识别
  3. leetcode-生成括号(回溯算法)
  4. 数据库关机_数据库:MySQL常见的三种存储引擎InnoDB、MyISAM、MEMORY的区别?
  5. mysql国内源码安装,mysql 源码包安装
  6. 大话设计模式读书笔记10----外观模式(Facade)
  7. 测试只描述现象,不下结论
  8. php给留言分配id_php建立简单的用户留言系统
  9. 联想lenovo G40-70M 无线网卡白名单跳过
  10. 数学建模数据驱动之统计学预备知识
  11. 古今地名对照总表 按笔划数排序 强烈推荐的资料
  12. jQuery的五种初始化加载写法
  13. 重装windows10系统的教程
  14. android studio 官方虚拟机,Android Studio 移动虚拟机
  15. Particle Filtering粒子滤波
  16. SpringBoot的幕后推手是谁?
  17. 有汇源上下界最大流和最小流
  18. 火爆全网的 Evil.js 源码解读
  19. 现金流动负债比率 和 ROE详解
  20. 美学心得(第二百二十四集)罗国正

热门文章

  1. mysql -u root -p 解释
  2. Python 中使用help()命令后如何退出
  3. Spring Boot 10:处理Json数据中的null值
  4. bzoj 5369: [Pkusc2018]最大前缀和
  5. 记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
  6. 测试环境服务器硬盘塞满问题排查
  7. IntelliJ idea学习资源
  8. JS与APP原生控件交互
  9. osal_start_timerEx(Lock_TaskID,SBP_START_DEVICE_EVT,SBP_PERIODIC_EVT_PERIOD)的理解
  10. C#将dll打包到程序中