2018-1-20 by Atlas


  • 设计思想

核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

  • 应用场景

Template Method Pattern是在父类建立处理逻辑的大纲骨架,而在子类补充具体的处理内容。把Template Method Pattern应用在生成对象实例方面,以Template Method Pattern架构获取产生对象实例的工厂,就是Factory Method Pattern。

  • UML 类图

  • Product(产品)参与者
    框架的部分。这个抽象类规定此Pattern所产生的对象实例应有的接口,具体内容则由子类的ConcreteProduct参与者规定。
  • Creator(生产者)参与者
    框架的部分。这是产生Product参与者的抽象类。具体的内容由子类的ConcreteCreator参与者决定。
    Creator参与者对于实际产生的ConcreteProduct参与者完全一无所知。Creator参与者唯一直到的是只要调用Product参与者和产生对象的方法,就能产生Product。
  • ConcreteProduct(具体产品)参与者
    实际处理内容的部分。规定具体的产品样式。
  • ConcreteCreator(具体生产者)参与者
    实际处理内容的部分。规定制造实际产品的类。
  • 标准示例
public abstract class Product {public abstract void use();
}public abstract class Factory {public final Product create(String owner) {Product p = createProduct(owner);registerProduct(p);return p;}protected abstract Product createProduct(String owner);protected abstract void  registerProduct(Product product);
}public class IDCard extends Product {private String owner;public IDCard(String owner){System.out.println("创建" + owner + "的卡。");this.owner = owner;}public void use() {System.out.println("使用" + owner + "的卡。");}public String getOwner() {return owner;}
}public class IDCardFactory extends Factory {private Vector<String> owners = new Vector<String>();protected Product createProduct(String owner) {return new IDCard(owner);}protected void registerProduct(Product product) {IDCard card = (IDCard) product;owners.add(card.getOwner());}public Vector<String> getOwners() {return owners;}
}

Product定义产品骨架。
Factory定义工厂生产过程骨架。
IDCard具体实现产品的内容。
IDCardFactory具体实现工厂生产IDCard对象实例。

  • 案例鉴赏
public class ContextLoader {protected void configureAndRefreshWebApplicationContext(ConfigurableWebApplicationContext wac, ServletContext sc) {// ...wac.refresh();// ...}
}public interface ConfigurableApplicationContext extends ApplicationContext, Lifecycle, Closeable {// ...void refresh() throws BeansException, IllegalStateException;ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;// ...
}public abstract class AbstractApplicationContext extends DefaultResourceLoaderimplements ConfigurableApplicationContext, DisposableBean {// ...public void refresh() throws BeansException, IllegalStateException {// ...ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();}protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {refreshBeanFactory();ConfigurableListableBeanFactory beanFactory = getBeanFactory();// ...return beanFactory;}public abstract ConfigurableListableBeanFactory getBeanFactory() throws IllegalStateException;// ...
}public abstract class AbstractRefreshableApplicationContext extends AbstractApplicationContext {// ...protected final void refreshBeanFactory() throws BeansException {// ...DefaultListableBeanFactory beanFactory = createBeanFactory();// ...}protected DefaultListableBeanFactory createBeanFactory() {return new DefaultListableBeanFactory(getInternalParentBeanFactory());}public final ConfigurableListableBeanFactory getBeanFactory() {// ...return this.beanFactory;}// ...
}

spring框架初始化ApplicationContext创建BeanFactory过程删减后的骨架。

转载于:https://blog.51cto.com/damon188/2063297

设计模式-工厂方法(Factory Method)相关推荐

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

    模式定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得一个类的实例化延迟到子类 类图 应用场景 1.当你不知道该使用对象的确切类型的时候: 2.当你希望为库或框架提供扩展其内部组件的方法 ...

  2. [设计模式-创建型]工厂方法(Factory Method)

    概括 名称 Factory Method 结构 动机 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 适用性 当一个类不知道它所必 ...

  3. Spring 通过工厂方法(Factory Method)来配置bean

    在spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. 在第一种利用bean config file(spring xml)方式中 ...

  4. Java工厂方法---Factory Method

    工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类 工厂方法优点: 1.支持OCP原则,开闭原则,把创建产品的细节隐藏起来,对上层类的调用时透明的 2 ...

  5. 工厂方法 Factory Method

    背景:有一个应用框架,它可以向用户显示多个文档.在这个框架中,两个主要的抽象是类Application和Document.这两个类都是抽象的.客户必须通过它们的子类来做与举替应用相关的实现. 分析:因 ...

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

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

  7. 设计模式 工厂方法_工厂方法设计模式

    设计模式 工厂方法 工厂方法模式是流行的创作设计模式之一. 它并不特别依赖于工厂对象来创建对象. 而是要在同一类中使用单独的方法来创建对象. Factory Method模式定义了一个用于创建对象的接 ...

  8. 设计模式 工厂方法_使用工厂方法模式设计最佳实践

    设计模式 工厂方法 在前面的"设计模式"示例中,我们解释了当今常用的"工厂"模式. 在本节中,我们将了解具有更多抽象的更高级的解决方案. 该模式称为工厂方法设计 ...

  9. (原创)无废话C#设计模式之四:Factory Method

    无废话C#设计模式之四:Factory Method       <a href='http://xgb.xgb.cc'>a</a>   <a href='http:// ...

  10. 设计模式 工厂方法_工厂设计模式–一种有效的方法

    设计模式 工厂方法 如您所知,"工厂方法模式"或俗称"工厂设计模式"是"创意设计模式"类别下的一种设计模式. 模式背后的基本原理是,在运行时 ...

最新文章

  1. java 签名 apk mac_java 方法签名
  2. Linux 解压命令
  3. (原创)自已实现服务器控件 之 简单的Label控件
  4. 区块链应用 | 高烧的区块链,被误读的区块链
  5. php oracle打印输出,php 连接oracle 导出百万级数据
  6. ado.net知识点博客网址
  7. 语音识别系统市场前景及发展趋势
  8. bzoj 2400: Spoj 839 Optimal Marks(最小割)
  9. 云计算介绍、TCP/IP协议及配置
  10. 张亚勤寄语哥伦比亚大学2020年毕业生:引领未知时代
  11. 君正Ingenic X1000E_halley2 更改Logo
  12. Openstack基础八大核心组件
  13. 第三方登陆--狸菇凉_
  14. dat image 微信_电脑微信image文件夹下的dat文件怎么打开?
  15. Html table边框重叠存在空隙的问题
  16. 专业档案门类代码编码方案
  17. 如何免费将excel表格转换成Word文档?
  18. Python pyglet 自制3D引擎入门(一) -- 绘制几何体、创建3D场景
  19. 基于Linux用C语言实现TCP半双工通信和UDP半双工通信
  20. 色深和色度采样,视频编解码

热门文章

  1. php接口和java接口_java和php接口的区别是什么
  2. figma设计_Figma与Adobe XD:我们如何选择下一个设计工具
  3. 列表嵌套字典,根据字典某一key排序
  4. Android 中文 API (16) —— AnalogClock
  5. 安卓操作sqlite3,增删改查
  6. 一键安装lamp脚本--初级版
  7. ubuntu 的QT4的qmake失败的处理方法
  8. LINUX内核完全注释
  9. poj 3125 Printer Queue(STL注意事项)
  10. 小米oj 反向位整数(简单位运算)