设计模式之Factory Method模式
作用:将实例的生成交给子类
用Template Method模式来构建生成实例的工厂,这就是Factory Method模式。
在Factory Method中,父类决定实例的生成方式,但并不决定所要生成的具体的类,具体的处理全部交给子类去负责
UML类图:

Product类:
public abstract class Product
{
public abstract void use();
}
use方法的实现交给Product的子类
Factory类:
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);
}
IDCard类:
public class IDCard extends Product
{
private String owner; IDCard(String owner)
{
this.owner = owner;
} public void use()
{
System.out.println("use it.");
} public String getOwner()
{
return owner;
}
}
IDCardFactory类:
public class IDCardFactory extends Factory
{
private List owners = new ArrayList(); protected Product createProduct(String owner)
{
return new IDCard(owner);
} protected void registerProduct(Product product)
{
owner.add(((IDCard)product).getOwner());
} public List getOwners()
{
return owners;
}
}
Main类:
public class Main
{
public static void main(String[] argvs)
{
Factory factory = new IDCardFactory(); Product card1 = factory.create("XXX");
card1.use();
}
}
步骤:首先创建对应实例的工厂,然后通过实例的工厂去创建对应实例,此中实例的构造函数是包内,并非public
设计模式之Factory Method模式的更多相关文章
- 设计模式:factory method模式
核心:将实例的生成交给子类,父类中只定义生成实例的接口 理解:对比模板方法模式的思维非常类似,模板方法模式中的模板方法理解成创造对象的抽象方法,不再是流程框架,就变成工厂方法模式,只是具体的方法是创建 ...
- 设计模式(四)Factory Method模式
简单来说,用Template Method模式来构建生成实例的工厂,就是Factory Method模式.在这个模式中,父类决定实例的生成方式,但不决定所要生成的具体的类,具体的处理全部交给子类负责. ...
- 设计模式初学者笔记:Factory Method模式
如果要选择一种最多人熟悉的Factory Method模式的具体应用,那么就应该是MFC的App/Doc架构了.Factory Method主要在类框架中使用,以解决以下问题:框架必须实例化类,但框架 ...
- Java设计模式:Factory Method(工厂方法)模式
概念定义 工厂方法(Factory Method)模式,又称多态工厂(Polymorphic Factory)模式或虚拟构造器(Virtual Constructor)模式.工厂方法模式通过定义工厂抽 ...
- Factory Method模式
Factory Method(工厂方法)模式属于GoF设计模式中的创建型分组,它用于在不之制定待创建对象的具体类的情况下创建对象.--<asp.net设计模式> 说白了就是一个人想要出国旅 ...
- 设计模式学习--Factory Method
What Factory Method:定义一个创建对象的接口,让子类来决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. Why Factory Method是一个比較基 ...
- [学习笔记]设计模式之Factory Method
写在前面 为方便读者,本文已添加至索引: 设计模式 魔法手札索引 在上篇笔记Abstract Factory设计模式中,时の魔导士创建了一系列的FoodFactory,并教会了其中一名霍比特人theC ...
- 一天一个设计模式——模板方法(Template Method)模式
一.模式说明 现实世界中的模板是用于将事物的结构规律予以固定化.标准化的成果,它体现了结构形式的标准化.例如镂空文字印刷的模板,通过某个模板印刷出来的文字字体大小都是一模一样,但是具体使用什么材质的颜 ...
- 设计模式之Template Method模式
作用:将具体的处理交给子类 什么是Template Method模式? Template Method模式是指带有模板功能的模式,组成模板的方法被定义在父类中,且这些方法为抽象方法.子类去实现父类中的 ...
随机推荐
- python 视频爬虫
打开网址:http://mv.688ing.com/ 输入视频播放地址 发现很多链接以.ts结尾. # import requests import os def download(): header ...
- C#控件之ComboBox控件使用
首先如果要给ComboBox控件输入要显示的内容,方法是点击控件会显示如下图所示: 然后点击”编辑项”,如下所示: 下面在这里输入控件要显示的内容,即可. 如果要让ComboBox控件设置默认显示项, ...
- ASP.NET MVC页面报错System.InvalidOperationException The view found at '~/Views/Home/Index.cshtml' was not created.
Application Exception System.InvalidOperationException The view found at '~/Views/Home/Index.cshtml' ...
- 神州数码BGP路由协议配置
实验要求:了解BGP路由协议的配置方法及原理 拓扑如下 R1 enable 进入特权模式 config 进入全局模式 hostname R1 修改名称 interface l0 进入端口 ip add ...
- storm入门基础实例(无可靠性保证实例)
本实例为入门篇无可靠性保证实例,关于storm的介绍,以及一些术语名词等,可以参考Storm介绍(一).Storm介绍(二). 本案例是基于storm0.9.3版本 1.案例结构 案例:Word Co ...
- Dart 中dynamic 的使用
void main(){ var a; a=10; b ="Dart"; dynamic b =20; b ="JavaScript" var list =ne ...
- chrome中安装.crx后缀的离线插件
在前端开发中常常需要在chrome中安装一些插件辅助开发,比如最常用的Postman.React Developer Tools.Vue.js devtools等等...今天分享一下不需要“FQ”的插 ...
- TIME_WAIT
前言 请说说你对TCP连接中time_wait状态的理解 解答: 先上TCP的状态变迁图 1. time_wait状态如何产生? 由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一 ...
- 取MySQL结果集的第一条记录
select * FROM SU_supplycontract t WHERE supplyContractCode="CRM20180813002" limit 1;
- angularjs - 自定义指令(directive)
自定义指令(directive) 使用 .directive 函数来添加自定义的指令. 要调用自定义指令,HTML 元素上需要添加自定义指令名. 例子:使用驼峰法来命名一个指令, demoDirect ...