【设计模式 05】工厂方法模式
工厂方法模式
define an interface or abstract class for creating an object but let the subclasses decide which class to instantiate.
参考:
- refactoringguru | factory-method
- javatpoint | factory-method-design-pattern
- 博客园| 工厂方法
简单工厂的问题
简单工厂把可能很复杂的对象创建过程分装在工厂类内部,客户端只需要给简单工厂一个“类的标志”,工厂类就能动态返回一个实例化对象,这样的好处是简化了客户端操作,从客户端按说,符合开闭原则,但每次添加新的产品,都需要修改工厂类,添加新的判断逻辑,不符合开闭原则。为了解决简单工厂的这个问题,工厂方法中会先定义一个创建对象的接口或抽象类,然后让子类去决定实例化哪个类。
工厂方法的优点
- 客户端只需要知道产品对应的接口即可,无需关心产品的具体实现细节。
- 比简单工厂有更好的可拓展性,添加新产品只需要实现接口即可。
- 耦合度进一步下降。
适用场景
- 如果无法预知对象确切类别及其依赖关系时
- 需要将类的实例化过程延迟到其子类时
- 工厂方法可以复用创建好的对象来节省资源(缓存)
例
所有工厂类的接口:
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】工厂方法模式相关推荐
- python类是实例的工厂_Python设计模式之工厂方法模式实例详解
本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...
- 设计模式复习-工厂方法模式
设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...
- C#设计模式(3)——工厂方法模式
一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...
- 设计模式之工厂方法模式(创建型)
一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...
- 设计模式之工厂方法模式应用例题
设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...
- 设计模式:工厂方法模式(Factory method)
设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...
- 【设计模式】工厂方法模式(C#)
[设计模式]工厂方法模式 1.概述 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则. 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象.工厂方法使一个产品类的实例化 ...
- 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例
文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...
- 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)
文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...
- 设计模式之工厂方法模式(Factory Method)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...
最新文章
- oracle上浮下浮分析函数_Oracle SQL高级编程——分析函数(窗口函数)全面讲解...
- Java RTTI运行时类型识别
- leetcode-生成括号(回溯算法)
- 数据库关机_数据库:MySQL常见的三种存储引擎InnoDB、MyISAM、MEMORY的区别?
- mysql国内源码安装,mysql 源码包安装
- 大话设计模式读书笔记10----外观模式(Facade)
- 测试只描述现象,不下结论
- php给留言分配id_php建立简单的用户留言系统
- 联想lenovo G40-70M 无线网卡白名单跳过
- 数学建模数据驱动之统计学预备知识
- 古今地名对照总表 按笔划数排序 强烈推荐的资料
- jQuery的五种初始化加载写法
- 重装windows10系统的教程
- android studio 官方虚拟机,Android Studio 移动虚拟机
- Particle Filtering粒子滤波
- SpringBoot的幕后推手是谁?
- 有汇源上下界最大流和最小流
- 火爆全网的 Evil.js 源码解读
- 现金流动负债比率 和 ROE详解
- 美学心得(第二百二十四集)罗国正
热门文章
- mysql -u root -p 解释
- Python 中使用help()命令后如何退出
- Spring Boot 10:处理Json数据中的null值
- bzoj 5369: [Pkusc2018]最大前缀和
- 记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
- 测试环境服务器硬盘塞满问题排查
- IntelliJ idea学习资源
- JS与APP原生控件交互
- osal_start_timerEx(Lock_TaskID,SBP_START_DEVICE_EVT,SBP_PERIODIC_EVT_PERIOD)的理解
- C#将dll打包到程序中