概述

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。

 适用性

    1.当一个类不知道它所必须创建的对象的类的时候。2.当一个类希望由它的子类来指定它所创建的对象的时候。3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。

 参与者

    1.Product定义工厂方法所创建的对象的接口。2.ConcreteProduct实现Product接口。3.Creator声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象。4.ConcreteCreator重定义工厂方法以返回一个ConcreteProduct实例。

类图:
                

代码描述:
/*** 定义工厂方法所创建的对象的接口。* @author Linhai Gu**/
public interface IWork {void doWork();
}

<strong><span style="font-size:18px;">/*** 实现IWork接口。* @author Linhai Gu**/
public class CoderWork implements IWork{@Overridepublic void doWork() {// TODO Auto-generated method stubSystem.out.println("程序员拼命写完代码,并提交项目!");}}</span></strong>


<strong><span style="font-size:18px;">/*** 实现IWork接口。* @author Linhai Gu**/
public class ManagerWork implements IWork{@Overridepublic void doWork() {// TODO Auto-generated method stubSystem.out.println("项目经理审核项目并上线!");}}</span></strong>


<strong><span style="font-size:18px;">/*** 声明工厂方法,该方法返回一个IWork类型的对象。* 可以调用工厂方法以创建一个IWork对象。* @author Linhai Gu**/
public interface IWorkFactory {IWork getWork();
}</span></strong>


<strong><span style="font-size:18px;">/*** 重定义工厂方法以返回一个具体实例。* @author Linhai Gu**/
public class CoderWorkFactory implements IWorkFactory{@Overridepublic IWork getWork() {// TODO Auto-generated method stubreturn new CoderWork();}}
</span></strong>


<strong><span style="font-size:18px;">/*** 重定义工厂方法以返回一个具体实例。* @author Linhai Gu**/
public class ManagerWorkFactory implements IWorkFactory{@Overridepublic IWork getWork() {// TODO Auto-generated method stubreturn new ManagerWork();}}</span></strong>


<strong><span style="font-size:18px;">/*** 测试* @author Linhai Gu**/
public class MainTest {public static void main(String[] args) {// TODO Auto-generated method stubCoderWorkFactory coderWorkFactory=new CoderWorkFactory();ManagerWorkFactory managerWorkFactory=new ManagerWorkFactory();coderWorkFactory.getWork().doWork();managerWorkFactory.getWork().doWork();}}</span></strong>


运行结果:

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/41413431    情绪控_

创建型模式--工厂方法模式相关推荐

  1. python创建方法draw_【python设计模式-创建型】工厂方法模式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻 ...

  2. 创建型设计模式----工厂方法模式

    1. 介绍 1.1 定义 工厂方法模式,又称工厂模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象. 1.2 主要作用 将类的实例化(具体产品的创建)延迟到工厂类的子类(具体 ...

  3. 软件架构设计师-创建型模式-单例模式-原型模式-工厂方法模式-抽象工厂模式-建造者模式

    文章目录 1.单例模式 2.原型模式 3.工厂方法(Factory Method)模式 4.抽象工厂(AbstractFactory)模式 5.建造者(Builder)模式 6.作者答疑   在面向对 ...

  4. 设计模式-创建型模式-工厂方法模式

    工程源码:c++设计模式-创建型模式-工厂方法模式https://download.csdn.net/download/qq_40788199/85541617 码云:https://gitee.co ...

  5. 重学Java设计模式-创建者模式-工厂方法模式

    重学Java设计模式-创建者模式-工厂方法模式 内容摘自:重学 Java 设计模式:实战工厂方法模式「多种类型商品不同接口,统一发奖服务搭建场景」 | bugstack 虫洞栈 工厂方法模式介绍 图片 ...

  6. 设计模式学习笔记-2 创建者模式-工厂方法模式

    设计模式学习笔记-2 创建者模式-工厂方法模式 工厂模式介绍 工厂模式又称工厂方法模式,是一种创建型设计模式,其在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 这种设计模式使Java开 ...

  7. 【设计模式】 - 创建者模式 - 工厂方法模式、抽象工程模式

    工厂方法模式.抽象工程模式 前言 工厂方法模式. 抽象工程模式 1. 简单工厂模式(不属于GOF的23种经典设计模式) 1.1 结构 1.2 实现 缺点 2. 工厂方法模式 2.1 结构 2.2 实现 ...

  8. java-抽象工厂模式+工厂方法模式+策略模式简单应用实战(登录场景)

    前言 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计模式 ...

  9. 策略模式和工厂模式的区别_设计模式之工厂模式-工厂方法模式

    设计模式之工厂模式-工厂方法模式 大家好,欢迎来到污污弹公司,今天司小司又接到了一个新活-披萨项目. 来源:凯哥Java(kaigejava) 需求: 披萨项目: 要方便披萨品种的扩展.要便于维护.要 ...

  10. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

最新文章

  1. Django --ORM常用的字段和参数 多对多创建形式
  2. android 自定义打包,android 自定义打包后的app名称
  3. GRUNT----JSHINT
  4. Work Time Manager【开源项目】- 创建自己日志组件 2.0重构
  5. 聚焦四大领域,恒生电子发布2022年金融科技技术与应用趋势
  6. linux 添加sftp用户
  7. python 编码问题_Python电源挑战| 竞争编码问题
  8. nemesis什么车_马力2100匹《Trion Nemesis》谜样超跑诞生中?
  9. 【科普篇】推荐系统之矩阵分解模型
  10. qt中如何模拟按钮点击_怎么在qt中实现一个按钮列表?
  11. 腾讯视频 Python 爬虫项目实战
  12. dispatcherServlet源码分析之doDispatch
  13. pmp学习资料下载-pmp备考
  14. ESET_VC52_UPID (nod32激活获取器)V4.2.0.9 绿色版
  15. win10 提升administrator权限 管理员权限
  16. C语言 习题3-1 比较大小 (简单解法)
  17. 高等数学(第七版)同济大学 习题6-2 (后18题)个人解答
  18. C语言面试题--已知整形变量在内存中占4个字节的空间,现有一无符号整形变量a = 0x20190125,请编写函数求出变量a所占内存每个字节的值是多少?
  19. 【09年特长生第四题】开发区规划
  20. 文件服务器拷贝资料需要解锁,如何加密U盘文件防止复制,怎样实现U盘文件防拷贝?...

热门文章

  1. 用GDB调试程序(七)
  2. js获取当前浏览器地址栏的链接,然后在链接后面加参数
  3. Collections 索引
  4. js parsefloat
  5. linux命令:系统裁剪之五dropbear嵌入式系统专用ssh服务
  6. 数据产品设计专题(4)- 程序化交易业务架构模型
  7. 教务查询子系统时序图
  8. 数组、链表、Hash(转)
  9. 大数据下Limit使用(MySQL)
  10. 朴素贝叶斯法(二)——基本方法