设计模式之工厂方法模式(创建型)
一、模式定义
工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改工厂角色的情况下,引进新的产品。
工作方法模式也符合”开闭原则“。工厂方法模式也称虚拟构造器(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
设计模式之工厂方法模式(创建型)相关推荐
- 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例
文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...
- python类是实例的工厂_Python设计模式之工厂方法模式实例详解
本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...
- C#设计模式(3)——工厂方法模式
一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...
- java工厂方法_Java设计模式之工厂方法模式
2.工厂方法模式 <设计模式之禅>中用神话故事女娲造人来比概述工厂方法模式. 女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放置到大地上生长,工艺过程是没有错的,但是意外随时都会发生 ...
- 设计模式之工厂方法模式应用例题
设计模式之工厂方法模式应用例题 题目描述 类结构图及相关说明 程序代码 运行结果 题目描述 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReade ...
- 设计模式:工厂方法模式(Factory method)
设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...
- 【设计模式】工厂方法模式(C#)
[设计模式]工厂方法模式 1.概述 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则. 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象.工厂方法使一个产品类的实例化 ...
- 设计模式复习-工厂方法模式
设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...
- 大牧絮叨设计模式:工厂方法模式
文章目录 1. 工厂方法模式概述 1.1. 工厂方法模式核心组件 1.2. 工厂方法模式优缺点 2. `Java`实现 (1) 核心工厂声明 (2) 核心产品声明 (3) 产品具体实现 (4) 工厂具 ...
最新文章
- Bundle捆绑压缩技术
- 鸟哥的Linux私房菜(基础篇)- 第十九章、认识与分析登录文件
- ext js gridpanel绑定到动态生成的store
- 程序员面试100题之十六:二叉树中两个节点的最近公共父节点
- 深入解读 MySQL 底层原理,让性能“飞起来”的方法总结
- Spark消费kafka任务卡死:Marking the coordinator xxx:9092 (id: 2147483647 rack: null) dead for group xxx
- 在AWS RDS SQL Server中进行审核
- break continue区别和用法_[分享]Python专题之流程控制(进阶用法2)
- C# MysqlHelper 执行reader时,遇到致命错误或者超时
- python编程入门第三版pdf-Python核心编程第3版PDF电子书免费下载
- 短信发送接口超详细短信接口使用教程
- updating homebrew
- VMware 安装ghost win7 gho
- HMS Core AR Engine 2D图片/3D物体跟踪技术 助力打造更智能AR交互体验
- webrtc服务器_服务器WebRTC over TCP的通道质量指标
- java word 颜色设置_如何在Java中为word文档(.doc或.docx)设置背景颜色(页面颜色)?...
- fastAPI简单使用
- C++ 制作动态链接库.dll及.dll使用
- 使用计算机配置路由器,用命令配置路由器基础(
- 社交视频Socialcam独领风骚:躺在Facebook的温床上借力YouTube?