设计模式-工厂方法(Factory Method)
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)相关推荐
- 设计模式--工厂方法(Factory Method)模式
模式定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类,使得一个类的实例化延迟到子类 类图 应用场景 1.当你不知道该使用对象的确切类型的时候: 2.当你希望为库或框架提供扩展其内部组件的方法 ...
- [设计模式-创建型]工厂方法(Factory Method)
概括 名称 Factory Method 结构 动机 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 适用性 当一个类不知道它所必 ...
- Spring 通过工厂方法(Factory Method)来配置bean
在spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. 在第一种利用bean config file(spring xml)方式中 ...
- Java工厂方法---Factory Method
工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类 工厂方法优点: 1.支持OCP原则,开闭原则,把创建产品的细节隐藏起来,对上层类的调用时透明的 2 ...
- 工厂方法 Factory Method
背景:有一个应用框架,它可以向用户显示多个文档.在这个框架中,两个主要的抽象是类Application和Document.这两个类都是抽象的.客户必须通过它们的子类来做与举替应用相关的实现. 分析:因 ...
- 设计模式 | 工厂方法模式及典型应用
工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化.工厂方法模式让一个类的实例化延迟到其子类. 工厂方法模式又简称为工厂 ...
- 设计模式 工厂方法_工厂方法设计模式
设计模式 工厂方法 工厂方法模式是流行的创作设计模式之一. 它并不特别依赖于工厂对象来创建对象. 而是要在同一类中使用单独的方法来创建对象. Factory Method模式定义了一个用于创建对象的接 ...
- 设计模式 工厂方法_使用工厂方法模式设计最佳实践
设计模式 工厂方法 在前面的"设计模式"示例中,我们解释了当今常用的"工厂"模式. 在本节中,我们将了解具有更多抽象的更高级的解决方案. 该模式称为工厂方法设计 ...
- (原创)无废话C#设计模式之四:Factory Method
无废话C#设计模式之四:Factory Method <a href='http://xgb.xgb.cc'>a</a> <a href='http:// ...
- 设计模式 工厂方法_工厂设计模式–一种有效的方法
设计模式 工厂方法 如您所知,"工厂方法模式"或俗称"工厂设计模式"是"创意设计模式"类别下的一种设计模式. 模式背后的基本原理是,在运行时 ...
最新文章
- java 签名 apk mac_java 方法签名
- Linux 解压命令
- (原创)自已实现服务器控件 之 简单的Label控件
- 区块链应用 | 高烧的区块链,被误读的区块链
- php oracle打印输出,php 连接oracle 导出百万级数据
- ado.net知识点博客网址
- 语音识别系统市场前景及发展趋势
- bzoj 2400: Spoj 839 Optimal Marks(最小割)
- 云计算介绍、TCP/IP协议及配置
- 张亚勤寄语哥伦比亚大学2020年毕业生:引领未知时代
- 君正Ingenic X1000E_halley2 更改Logo
- Openstack基础八大核心组件
- 第三方登陆--狸菇凉_
- dat image 微信_电脑微信image文件夹下的dat文件怎么打开?
- Html table边框重叠存在空隙的问题
- 专业档案门类代码编码方案
- 如何免费将excel表格转换成Word文档?
- Python pyglet 自制3D引擎入门(一) -- 绘制几何体、创建3D场景
- 基于Linux用C语言实现TCP半双工通信和UDP半双工通信
- 色深和色度采样,视频编解码