工厂方法模式(Factory Method),定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。

工厂方法实现时,由客户端决定实例化哪个工厂来实现具体的产品类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。每个具体的产品类都对应着一个具体的工厂类。

工厂方法模式中有如下四种角色:

Product(产品):Product角色属于框架这一方,是一个抽象类。定义了在工厂方法模式中生成的那些实例所持有的接口(API),但具体的处理则由子类ConcreteProduct角色决定。

Factory(工厂):Factory角色属于框架这一方,它是负责生成Product角色的抽象类,但具体的处理则由子类ConcreteFactory角色决定。不用new关键字来生成实例,而是调用生成实例的专用方法来生成实例,防止父类与其他具体类耦合。

ConcreteProduct(具体的产品):ConcreteProduct属于具体加工的这一方,它决定了具体的产品。

ConcreteFactory(具体的工厂):ConcreteFactory属于具体加工的这一方,它负责生成具体的产品。

下面这个例子中,为了更清楚表现层次关系,把抽象的产品类Product和抽象的工厂类Factory放到framework包中,而具体的产品类ProductA和ProductB及具体的工厂类FactoryA和FactoryB放到concrete包中。

抽象类:

package framework;public abstract class Product {public abstract void Show();
}
package framework;public abstract class Factory {public abstract Product Manufacture();
}

具体实现的类:

package concrete;
import framework.Product;public class ProductA extends Product {@Overridepublic void Show() {System.out.println("生产出了产品A");}
}
package concrete;
import framework.Product;public class ProductB extends Product {@Overridepublic void Show() {System.out.println("生产出了产品B");}
}
package concrete;
import framework.Factory;
import framework.Product;public class FactoryA extends Factory {@Overridepublic Product Manufacture() {return new ProductA();}
}
package concrete;
import framework.Factory;
import framework.Product;public class FactoryB extends Factory {@Overridepublic Product Manufacture() {return new ProductB();}
}

客户端调用过程:

import concrete.FactoryA;
import concrete.FactoryB;public class Main {public static void main(String[] args) {//客户要产品AFactoryA mFactoryA = new FactoryA();mFactoryA.Manufacture().Show();//客户要产品BFactoryB mFactoryB = new FactoryB();mFactoryB.Manufacture().Show();}}

工厂方法模式可以说是简单工厂模式的进一步抽象和拓展,克服了简单工厂违背开放-封闭原则的缺点。但工厂模式的缺点是每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。

将实例的生成交给子类——工厂方法模式相关推荐

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

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

  2. 北风设计模式课程---2、工厂方法模式

    北风设计模式课程---2.工厂方法模式 一.总结 一句话总结: 工厂方法模式相对于简单工厂模式只是修改了 [工厂核心类-将它变成接口],具体的创建产品的工作交给[工厂核心类的子类] 满足了开闭原则:不 ...

  3. 23种设计模式之工厂方法模式

    工厂方法模式的定义 定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂方法使一个类的实例化延迟到其子类 工厂方法模式的通用类图: 其中 Product 负责产品的共性,实现对事物最抽 ...

  4. 设计模式 - 工厂方法模式

    目录 实例 图片读取器 简单工厂解决方案 工厂方法模式 概念 工厂方法解决方案 方案的演进(配置文件) 总结 源码 实例 先看一个例子 图片读取器 设计一个可以读取不同类型图片格式的程序,针对每种图片 ...

  5. 第二部分:二十三种设计模式解读——什么是工厂方法模式

    二十三种设计模式解读--什么是工厂方法模式 author:陈镇坤27 日期:2022年2月10日 修改日期:2022年6月23日 文章目录 二十三种设计模式解读--什么是工厂方法模式 一.工厂方法模式 ...

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

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

  7. python的编程模式-实例讲解Python设计模式编程之工厂方法模式的使用

    工厂方法模式是简单工厂模式的进一步抽象和推广,它不仅保持了简单工厂模式能够向客户隐藏类的实例化过程这一优点,而且还通过多态性克服了工厂类过于复杂且不易于扩展的缺点.在工厂方法模式中,处于核心地位的工厂 ...

  8. 生成对象---工厂方法模式

    问题 当代码运行时我们才知道要生成的对象类型(BlogApptEncoder或者MegaBlogApptEncoder) 我们需要能够相对轻松的加入一些新的产品类型(如一种新业务处理方式SyncMl) ...

  9. java简单工厂模式实例造车,JAVA设计模式学习5——工厂方法模式

    工厂方法模式(Factory Method)又称虚拟构造子模式,可以说是简单工厂的抽象,也可以理解为简单工厂是退化了的工厂方法模式,其表现在简单工厂丧失了工厂方法的多态性.我们前一节中提到当产品结构变 ...

最新文章

  1. 零基础学Java大数据难不难
  2. 全网最火的Nacos源码构建,你找不到第二个有我仔细的!!
  3. python unittest断言大全_Python-unittest框架 断言使用
  4. 初学者也能看懂的DPDK解析
  5. Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入
  6. (原创)SpringBoot入门
  7. 剑指offer---连续子数组的最大和
  8. idea 断点下一步快捷件_Intellij IDEA 创建控制台项目,断点调试快捷方式
  9. bin mysql u root_MySQL安装后续步骤(修改root密码)
  10. Windows下最快的磁盘空间分析软件——WizTree
  11. Eclipse下载安装配置测试(超详细)
  12. 基于全球模式比较计划CMIP6与区域气候-化学耦合模式 WRF-Chem 的未来大气污染变化模拟
  13. Python绘制中国地图
  14. 端侧智能存算一体芯片的需求、现状与挑战
  15. 微信App iOS客户端不同阶段的发展策略
  16. 为什么有斯坦福计算机科学博士学位的你找不到工作?
  17. wps和office有什么区别?
  18. python 安卓王者荣耀刷金币
  19. 月薪过万必会的:双亲委托模型
  20. 三维vr全景摄影展示满足产品720立体浏览

热门文章

  1. shell脚本----for循环-转 Syntax error: Bad for loop variable
  2. FFMpeg写MP4文件例子分析
  3. java 阻塞队列介绍
  4. L2-028 秀恩爱分得快-PAT团体程序设计天梯赛GPLT
  5. PAT 乙级 1017. A除以B (20) Java版
  6. 【前端】CKeditor屏蔽“浏览服务器”功能
  7. Oracle-1:的列操作(增加列,修改列,删除列),包括操作多列
  8. MongoDB 基本命令
  9. Java进阶知识点:协变与逆变
  10. spring-data-jpa 复杂查询的写法(包含or的查询)