工厂方法模式

手机厂造手机,肥皂厂造肥皂,药品厂造药品。

假设有一大类对象A1,A2,A3,A4…他们都有一个共同的父类A
A1可以想成是手机,A2可以想成肥皂…

(下面例子的A1Factory就是手机厂,A2Factory就是肥皂厂)

那么如何利用工厂方法模式创建这些对象呢?看个例子

1、定义一个工厂的接口以及返回实体的方法

interface Factory{// 定义一个方法,返回AA create();
}

2、针对每个对象,定义创建他们的工厂,每个工厂都实现第一步的工厂接口

class A1Factory implement Factory{// A1的工厂类,返回A1对象,用A引用返回出来public A creat(){return new A1();}
}
class A2Factory implement Factory{// A2的工厂类,返回A2对象,也用A引用返回出来public A creat(){return new A2();}
}
A3、A4类似

3、使用的时候

看到下面这个效果,大概就能明白什么意思了吧,由工厂的父类,创建出对象,也用对应的父类A来接。那就相当于屏蔽了子类的差异,只要源头上换个工厂,那么返回的A就是对应工厂里面的产生的A的子类对象。

public A getObj(Factory f){return f.create();
}main(){// 给手机工厂,出来就是手机对象A A1 = getObj(new A1Factory());// 给肥皂工厂,出来就是肥皂对象A A2 = getObj(new A2Factory());
}

优缺点

很明显,工厂方法模式,创建每个对象都需要给他再创建一个对应的工厂类。这既是优点,又是缺点。
说优点,是因为这样做,相比较简单工厂来说,是把类的实例化延迟到了子类工厂上。
说缺点,是因为这样做,每次有新的类型,都要创建对应的工厂,感觉很冗余。

扩展

经常在工厂方法模式的各个子类工厂中,再使用简单工厂模式。
也就是说A1Factory的create方法,不一定只返回A1,可能还是A1的某个子类,至于具体是哪个,可以给create方法加个type入参,根据type的不同去区分。

总之就是这么个意思,就是实际生产中,很多情况下都是多个设计模式一起用,并不是只用某个设计模式。

[设计模式] ------ 工厂方法模式相关推荐

  1. 4. 星际争霸之php设计模式--工厂方法模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  2. java 工厂方法_java设计模式-工厂方法模式

    1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的"创建与使用相分离" ...

  3. 设计模式 | 工厂方法模式及典型应用

    工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化.工厂方法模式让一个类的实例化延迟到其子类. 工厂方法模式又简称为工厂 ...

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

    题目:假设你有一个 pizza 店,功能包括下订单.做 pizza,你的代码会如何写呢? def order_pizza(): pizza = Pizza() pizza.prepare() pizz ...

  5. 工厂方法模式_1天1个设计模式——工厂方法模式

    意图 工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型. 问题 假设你正在开发一款物流管理应用.1.0版本只能支持处理卡车运输,因此大部分的代码都位 ...

  6. JAVA设计模式 - 工厂方法模式

    工厂方法模式(Factory Pattern) 是一种创建型设计模式 , 它是Java中最常用的设计模式之一 . 1 . 工厂方法模式的定义 定义一个创建对象的接口 , 让子类决定实例化哪一个类 . ...

  7. Java设计模式—工厂方法模式抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

  8. C#设计模式--工厂方法模式

    0.C#设计模式-简单工厂模式 设计模式: 工厂方法模式(Factory Method Pattern) 介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用 ...

  9. 设计模式 - 工厂方法模式 - 基于 Java 实现

    常见和工厂有关的设计模式 和工厂相关的设计模式主要有三种,工厂方法模式,抽象工厂模式: 在前面的博客中介绍了简单工厂模式,本篇博客主要介绍的是工厂方法模式 什么是工厂方法模式 工厂方法模式是简单工厂的 ...

最新文章

  1. 初入react-redux (基于webpack babel的react应用框架)
  2. 中消协发布2018年春节消费提示
  3. Android http 的使用
  4. 1. 在虚拟机中 添加内容
  5. oracle基表恢复,查找V$PARAMETER 基表 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
  6. 计算机网络 — 网络层
  7. 2018计算机应用基础作业一,2018计算机应用基础试题及答案
  8. innerHTML和outerHTML以及innerText和outerText之间的区别
  9. selenium爬取维基百科信息
  10. LPC2294看门狗定时器
  11. 软件测试流程图Bug管理流程图
  12. Typora Beta版过期解决方法
  13. AGV-倍福beckhoff TWINCAT2及台达电机、传感器等使用总结
  14. MATLAB——LTI Viewer
  15. Python报错:local variable referenced before assignment
  16. (附源码)ssm小程序 实验室安全管理系统 毕业设计 031527
  17. Python使用openpyxl模块小批量处理Excel文件
  18. C++ 获取本机所有的网卡配置、IP地址和Mac地址
  19. Zotero(1)---文献管理软件Zotero安装教程
  20. 数字化营销,企业不可错失的裂变式增长机会

热门文章

  1. 『电子书』分享一波码农必备编程开发类书籍[转]
  2. 去月球“你知道戴维会变身成哪种动物吗?”
  3. LinkedList源码详解
  4. mybatis typehandler
  5. Java易混小知识——equals方法和==的区别
  6. Ruby 基础教程1-6
  7. this和static
  8. 关于c#静态构造函数
  9. MEF: MSDN 杂志上的文章(15) 拒绝【多个导出,但只用一个导入,会拒绝,但还是稳定的组合】...
  10. 【计算机网络复习 数据链路层】3.5.1 信道划分介质访问控制