什么是工厂设计模式

根据名字即可了解,工厂肯定是用来生产产品的,在我们的程序开发中,需要用到不同的类,对于熟悉SSH、SSM开发的可以知道,在初期学习的时候,总是有一个框架提供好的的factory供我们使用,利用它可以创建访问数据库的连接等操作。

定义:

利用template method设计模式创建我们想要的实例,就称之为factory method。

具体到面向对象

  • 《framework》生成实例框架:可以理解为在我使用factoy method时这个是必须的,组成元素在这个包下
  • 《product》: 具体的产品类,你需要生成什么就可以创建自己的产品。加工处理

UML 代码

这个例子就是实现创建一个身份证,然后使用它

  • framework包下
    - Factory :创建实例的方法 这里要注意创建 注册都是维护的protected方法
    - Product : 定义操作的方法
  • product包下
    - IdCard :具体的产品
    - IdCardFactory :实现了具体的创建。

  • Factory

package base.factory.framework;/*** @program: DesignPatterns* @description: 创建实例的类* @author: Mr.Dai* @create: 2018-05-07 15:48**/
public abstract class Factory {public final Product create(String name){Product product = createProduct(name);registerProduct(product);return product;}protected abstract Product createProduct(String name);protected abstract void registerProduct(Product product);
}
  • Product

package base.factory.framework;/*** @program: DesignPatterns* @description: 定义具体方法的类* @author: Mr.Dai* @create: 2018-05-07 15:51**/
public abstract class Product {public abstract void use();}
  • IdCard

package base.factory.idcard;import base.factory.framework.Product;/*** @program: DesignPatterns* @description: 具体的身份类* @author: Mr.Dai* @create: 2018-05-07 15:57**/
public class IdCard extends Product {private String name;IdCard(String name){System.out.println("创建了"+name+"的身份证");this.name=name;}@Overridepublic void use() {System.out.println("使用了"+name+"的身份证");}public String getOwer(){return this.name;}
}
  • IdCardFactory

package base.factory.idcard;import base.factory.framework.Factory;
import base.factory.framework.Product;import java.util.Vector;/*** @program: DesignPatterns* @description: 生产身份证具体的类* @author: Mr.Dai* @create: 2018-05-07 16:00**/
public class IdCardFactory extends Factory {private Vector idcards=new Vector<String>();@Overridepublic Product createProduct(String name) {return new IdCard(name);}@Overridepublic void registerProduct(Product product) {idcards.add(((IdCard)product).getOwer());}public Vector<String> getIdCards(){return idcards;}
}
  • 结果

具体说明

  • product:是生成实例具有的接口方法,具体处理由子类决定
  • CreatedProduct:具体的产品 由idcard承担
  • CreatedCreator:具体的创建者 由IdCardFactory承担
  • IdCardFactory是具体的承担者,父类Factory将会解除与子类的耦合,实际上是子类具体的创建者来生成具体的实例。
  • 实际运用中,我们没有必要去修改framework下的任何内容,假设我们这里要维护一台电视机,只需要创建具体的类即可。

实例产生的三种方式

  • 指定为抽象方法

public abstract class Factory {public final Product create(String name){
  • 直接生成
public abstract class Factory {public  Product create(String name){return new Product(name);//这样的话,product就不能为抽象类

Televison 电视类 并且实现 保存编号 以及所有者之间的对应表

  • Televison
package base.factory.television;import base.factory.framework.Product;/*** @program: DesignPatterns* @description: 电视类* @author: Mr.Dai* @create: 2018-05-07 16:40**/
public class Televison extends Product {private String name;Televison(String name){this.name=name;}@Overridepublic void use() {open();runing();close();}public void open(){System.out.println("开电视"+name);}public void runing(){System.out.println("看电视"+name);}public void close(){System.out.println("关闭电视"+name);}public String getName(){return  this.name;}
}
  • TelevisionFactory
package base.factory.television;import base.factory.framework.Factory;
import base.factory.framework.Product;import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;/*** @program: DesignPatterns* @description: 创建televi* @author: Mr.Dai* @create: 2018-05-07 16:45**/
public class TelevisionFactory  extends Factory {private TreeMap<Integer,String> teleS=new TreeMap<>();private int i=0;@Overrideprotected Product createProduct(String name) {return new Televison(name);}@Overrideprotected void registerProduct(Product product) {teleS.put(++i,((Televison)product).getName());}public TreeMap getTeles(){return  teleS;}
}

相关设计模式

  • template method :factory method就是模板设计模式的延伸。
  • singleton :单例模式,这里我们的产品可以改为单例模式,我们实际运用中使用的到的类比如hibernate中的,都是单例的 如数据库连接等。
  • Composite: composite模式用于product角色
  • Iterator: 在Iterator模式中使用iterator方法生成Iterator实例会使用Factory Method。

还有一个问题是,使用Factory Method 设计模式,必须在具体的Product作注释,不然使用者必须了解上层代码,或者维护可能会修改使用者的具体用意。

转载于:https://www.cnblogs.com/dgwblog/p/9003648.html

Factory Method (工厂模式)相关推荐

  1. 工厂方法(Factory Method)模式

    一.工厂方法(Factory Method)模式 工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟的子类中. 工厂方法模式是简单工厂 ...

  2. 设计模式的征途—3.工厂方法(Factory Method)模式

    上一篇的简单工厂模式虽然简单,但是存在一个很严重的问题:当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背开闭原则.如何实现新增新产品而 ...

  3. 09Abstract Factory(抽象工厂)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.Abstract Factory(抽象工厂)模式动机 在软件系统中,经常面临着一系列相互依赖的对象的创建工作.同时,由于需求的变化,往往存在更 ...

  4. 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法

    工厂方法模式: 定义:为创建对象定义一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟至子类. 应用场景: 客户类不关心使用哪个具体类,只关心该接口所提供的功能: 创建过程比较复杂,例如需 ...

  5. Factory Method工厂方法模式

    定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类,属于创建型模式 在此模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生产 ...

  6. 3.Factory Method 工厂方法模式(创建型模式)

    1.定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使得一个类的实例化延迟到子类. 2.实现代码如下: /// <summary>/// 工厂方法 ...

  7. 设计模式学习总结1 - 创建型1 - Abstract Factory抽象工厂模式

    AbstractFactory抽象工厂模式(创建型) 作用: 这种模式支持创建不同的对象,这些对象功能接近且一般都是在一起创建的.抽象工厂被具体化成不同的工厂来创建类似产品的不同产品.这种模式将类于使 ...

  8. 笔记:设计模式(3)-Abstract Factory抽象工厂模式

      工厂模式的起源 1.变化点在"对象的创建",因此就封装"对象创建": 2.面向接口编程,依赖接口,而非依赖实现. 动机(Motivation) 在系统中,经 ...

  9. Factory Method工厂方法

    "对象创建"模式 通过"对象创建"模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(以来具体类),从而支持对象创建的稳定.它是接口抽象之后的第一部工 ...

  10. Factory Pattern工厂模式

    源地址 工厂模式是一种创建型模式,提供了一种创建对象的最佳方法模式. 应用实例: 您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现. Hiberna ...

最新文章

  1. 资产配置决策系统的MATLAB实现
  2. 保时捷高管透露曾与苹果洽谈CarPlay之外合作事宜
  3. YISplashScreen
  4. C# string byte[] 转换
  5. mysql linux内核_mysql 5.7.15 vs mysql 5.6.31性能测试以及不同linux内核性能比较
  6. English Corpora - 英语语料库
  7. 【信息系统项目管理师】信息系统项目管理师计算题汇总
  8. 基于STC12C5A60S2的SDHC卡的初始化和读写过程
  9. 无老师作文巨讲堂2015.8
  10. greenDao的使用与封装
  11. 数据价值深度挖掘,分析服务上线“探索”能力
  12. linux wifi设置和相关介绍
  13. idea 不识别java文件,类文件变成灰色,而且有橙色角标
  14. Python干掉了98%的办公软件
  15. P1455 搭配购买
  16. Google Guava Splitter
  17. 网易邮箱批量登泉器v1.0
  18. LilyPond 乐谱软件
  19. Linux CPU,内存查查清楚
  20. AD原理图以及PCB图元件(作为库)绘制流程

热门文章

  1. 罗宾斯管理学13版pdf_罗宾斯管理学(第13版)笔记和课后习题(含考研真题)详解...
  2. c++实验总结_高考化学选三简答题总结6——配位化合物、配位键、配位数
  3. 吴恩达团队最新成果:用深度学习预测死亡概率,改善临终关怀
  4. RFID和安防究竟有什么关系?
  5. Java线程那点事儿
  6. mysql5.7.18-winx64安装
  7. hadoop2.0初识1.2
  8. MFCWinInet学习
  9. jQuery Mobile 学习资料
  10. LeetCode 914. 卡牌分组