一、模式定义

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

工作方法模式也符合”开闭原则“。工厂方法模式也称虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式

二、模式结构

工厂方法模式包含如下结构:

Product:抽象产品

ConcreteProduct:具体产品

Factory:抽象工厂

ConcreteFactory:具体工厂

三、简单实例

抽象工厂类:

public abstract class PayMethodFactory
{public abstract AbstractPay getPayMethod();
}

具体工厂类:

public class CashPayFactory extends PayMethodFactory
{public AbstractPay getPayMethod(){return new CashPay();}
} 

客户端调用:

PayMethodFactory factory;
AbstractPay payMethod;
factory=new CashPayFactory();
payMethod =factory.getPayMethod();
payMethod.pay(); 

三种工厂方法对比:https://blog.csdn.net/u014427391/article/details/80067882

设计模式之工厂方法模式(创建型)相关推荐

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

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

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

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

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

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

  4. java工厂方法_Java设计模式之工厂方法模式

    2.工厂方法模式 <设计模式之禅>中用神话故事女娲造人来比概述工厂方法模式. 女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生 ...

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

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

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

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

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

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

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

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

  9. 大牧絮叨设计模式:工厂方法模式

    文章目录 1. 工厂方法模式概述 1.1. 工厂方法模式核心组件 1.2. 工厂方法模式优缺点 2. `Java`实现 (1) 核心工厂声明 (2) 核心产品声明 (3) 产品具体实现 (4) 工厂具 ...

最新文章

  1. Bundle捆绑压缩技术
  2. 鸟哥的Linux私房菜(基础篇)- 第十九章、认识与分析登录文件
  3. ext js gridpanel绑定到动态生成的store
  4. 程序员面试100题之十六:二叉树中两个节点的最近公共父节点
  5. 深入解读 MySQL 底层原理,让性能“飞起来”的方法总结
  6. Spark消费kafka任务卡死:Marking the coordinator xxx:9092 (id: 2147483647 rack: null) dead for group xxx
  7. 在AWS RDS SQL Server中进行审核
  8. break continue区别和用法_[分享]Python专题之流程控制(进阶用法2)
  9. C# MysqlHelper 执行reader时,遇到致命错误或者超时
  10. python编程入门第三版pdf-Python核心编程第3版PDF电子书免费下载
  11. 短信发送接口超详细短信接口使用教程
  12. updating homebrew
  13. VMware 安装ghost win7 gho
  14. HMS Core AR Engine 2D图片/3D物体跟踪技术 助力打造更智能AR交互体验
  15. webrtc服务器_服务器WebRTC over TCP的通道质量指标
  16. java word 颜色设置_如何在Java中为word文档(.doc或.docx)设置背景颜色(页面颜色)?...
  17. fastAPI简单使用
  18. C++ 制作动态链接库.dll及.dll使用
  19. 使用计算机配置路由器,用命令配置路由器基础(
  20. 社交视频Socialcam独领风骚:躺在Facebook的温床上借力YouTube?

热门文章

  1. Spring Cloud 的微服务架构分析实战
  2. 仿基因编程原理导论(里面的几个重要的概念正在做修正,所以这只能算是一个原理的初稿。)
  3. 2017年的奋斗目标
  4. Maxwell简介使用
  5. 手把手教你如何用selenium实现自动抽奖工具(穿越火线王者夺宝活动为例)
  6. CAD电气工程图教程之布局方法和设计规则
  7. tinymce编辑器自定义中文字体
  8. 电脑蓝屏、经常用一会后蓝屏问题检查修复
  9. 使用OpenCV调用摄像头
  10. mysql笛卡尔积的解释