参考:http://wxg6203.iteye.com/blog/740229

简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method)模式。

简单工厂模式就是由一个工厂类根据传入的参数决定创建哪一种的产品类。

有4个角色

工厂类角色:是具体产品类角色直接调用者。

抽象产品角色:接口或抽象类,负责具体产品角色的定义,及与客户端的交互。

具体产品角色:被工厂类创建的对象,也是客户端实际操作对象。

客户端:调用工厂类产生实例,并调用实例的方法进行相应工作。

public interface people{public void say();}public class chinese implements people{public void say(){System.out.println("说中国话");}}public class american implements people{public void say(){System.out.println("speak english");}}public class peopleFactory{public static people create(int type){if(type==1){return new chinese();}else if(type==2){return new american();}}}public class test{public static void main(String []args){people p=peopleFactory.create(1);p.say();p=peopleFactory.create(2);p.say();}}

工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。

首先完全实现‘开-闭 原则’,实现了可扩展。其次更复杂的层次结构,可以应用于产品结果复杂的场合。   

工厂方法模式的对简单工厂模式进行了抽象。有一个抽象的Factory类(可以是抽象类和接口),这个类将不在负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。在这个模式中,工厂类和产品类往往可以依次对应。即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个具体产品,这个具体的工厂就负责生产对应的产品。   

工厂方法模式(Factory Method pattern)是最典型的模板方法模式(Templete Method pattern)应用。

如图:

基于面向接口编程的原理,创建部分成为抽象工厂与实体工厂,创建出的对象成为抽象产品与实体产品。你可能知道为什么它能解决上面的问题了:多了一个新对象,只需添加一套对应的工厂和产品就可以了,不需要修改原代码,或只需进行少量的修改。

具体:

实体工厂实现抽象工厂,实体产品实现抽象产品;抽象工厂生产抽象产品,实体工厂生产实体产品;实体工厂A生产实体产品A,实体工厂B生产实体产品B。

public interface Icar{public void docar();}public class bwm implements Icar{public void docar(){System.out.println("我是宝马,别摸我");}}public class buick implements Icar{public void docar(){System.out.println("我是别克,很酷");}}public interface Icarfactory{public Icar createCar();} public class bmwFactory implements Icarfactory{public Icar createCar(){return new bwm();}} public class buickFactory implements Icarfactory{public Icar createCar(){return new buick();}} public class test{public static void main(String []args){Icarfactory factory=new bmwFactory();Icar bwm= factory.createCar(); bwm.docar();factory=new buickFactory();Icar buick= factory.createCar(); buick.docar();}}

抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。

抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据LSP原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。

简介

当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。

  每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结果。

转载于:https://www.cnblogs.com/lyggqm/p/7098698.html

[设计模式]工厂模式factory相关推荐

  1. 设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

    工厂模式 Factory Pattern(简单工厂.工厂方法.抽象工厂) 工厂模式-创建型模式-提供了创建对象的最佳方式. 在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且是通过一个共同的接口来 ...

  2. 趣谈设计模式 | 工厂模式(Factory):利用工厂来创建对象

    文章目录 案例:外设店铺 简单工厂 工厂方法 抽象工厂 总结 要点 三类工厂模式的特点 三种工厂模式的适用场景 完整代码与文档 工厂模式模式是创建型模式中较为常用的一个,它并不是一个模式,而是三种功能 ...

  3. (创建型)设计模式——工厂模式(factory)

    ps:在以下讲述工厂模式中,模仿的场景如下:我们需要生产Car,建立相对应的CarFactory.使用CarFactory工厂来生产Car,并且可以在生产过程中进行一些处理.类图和代码如下. 1.Mo ...

  4. 魔兽争霸之PHP设计模式-工厂模式[Factory]

    前言:相信有的人接触过会员系统,有的甚至写过.本文章不是为了说明怎么建设一个会员系统.而是提出一种思路.想学怎么建会员系统的可以不看本文,而想知道怎么建得更专业点的没事可以看看.哈哈. 问题的提出: ...

  5. 设计模式(一)工厂模式Factory(创建型)

    设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题. ...

  6. 设计模式(四)——工厂模式(Factory Pattern)

    工厂模式(Factory Pattern) 意义 工厂模式 实现了创建者和调用者的分离.将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性 ...

  7. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

  8. 设计模式——工厂模式(Factory Pattern)

    设计模式--工厂模式(Factory Pattern) 工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式.该 ...

  9. 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。

    设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...

最新文章

  1. php设计模式八-----装饰器模式
  2. SAP限定同名程序同时运行数量
  3. leetcode Add and Search Word - Data structure design
  4. Java线程的等待与唤醒代码示例
  5. 【安卓开发】Android初级开发(okhttp3发送带header与带参数的GET请求)
  6. 160 - 23 Chafe.1
  7. javascript的stack overflow
  8. 【蓝桥杯官网试题 - 算法训练 】K好数(线性dp与优化)
  9. BugkuCTF-MISC题1和0的故事
  10. python mssql session_python的web框架webpy【session amp; cookie】五 - 莫激动 - ITeye博客
  11. 《学习OpenCV》课后习题解答(第四章)(仅供参考)(不断更新)
  12. 转换运行时获取DTP语义组
  13. java最好性能手机_企业级Java应用最重要的4个性能指标
  14. ubuntu下解决csdn网页打不开的问题
  15. 计算机系统建模与仿真论文,计算机模拟 仿真论文.doc
  16. spring源码 第二个后置处理器方法的使用-推断构造函数
  17. 程序猿---北京骑行天津~~~~
  18. java书号属性,基于Java的ISBN书号查询示例代码-六派数据
  19. AppInfoUtil 获取App应用程序信息工具类
  20. linux安装启动php-fpm,linux上nginx的安装启动以及配合php-fpm的使用

热门文章

  1. windows 下终止指定端口的进程
  2. Java中集合(四)LinkedList
  3. (5) DSP28335--SCI
  4. 【机器视觉】Qt联合Halcon编程之显示图片
  5. 【Linux】一步一步学Linux——nstat命令(190)
  6. 创新创业计划书_创践——大学生创新创业实务 ——如何撰写一份优秀的商业计划书...
  7. java thread 内存泄露_Java ThreadLocal 内存泄露问题分析及解决方法。
  8. 从php传过来的是字符串吗,PHP 字符串
  9. 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)
  10. 在 Microsoft Word 文档 中粘贴代码实现语法高亮的方法