设计模式学习—工厂方法模式
来源:互联网 发布:男主女主网络大神 编辑:程序博客网 时间:2024/05/21 15:39
- 动机:解决简单工厂中增加新产品需要修改工厂逻辑
- 角色:
- 抽象工厂(一个)
- 具体工厂
- 抽象产品(一)
- 具体产品
- 结构:
4.优缺点:
- 优点:
- 用户只需要关心所需产品对应的工厂,无需关心创建细节,甚至无需知道具体产品类的类名
- 工厂可以自主确定创建何种产品对象,而如何创建这个对象的细节则完全封装在具体工厂内部
- 在系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品,而只要添加一个具体工厂和具体产品就可以了,符合“开闭原则”
- 缺点:
- 需要编写新的具体产品类,而且还要提供与之对应的具体工厂类,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度(编译运行)
- 由于考虑到系统的可扩展性。在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。
- 优点:
5.用例:集合实现的Iterator接口、JMS、JDBC、电视机工厂、日志记录器(分类记录日志)、
代码:
/**
* 抽象产品
* @author ilmlife
* <pre>2013 -12- 3下午10:34:07</pre>
*/
public abstract class ImageReader {
public abstract void reader();
}
/**
* 抽象工厂
* @author ilmlife(ilmlife @163.com)
* <pre>2013 -12- 3下午10:37:04</pre>
*/
public abstract class ImageReaderFactory {
public abstract ImageReader createReaderImage();
}
/**
* 具体产品
* @author ilmlife
* <pre>2013 -12- 3下午10:37:33</pre>
*/
public class GifReader extends ImageReader {
@Override
public void reader() {
System. out.println("gif image reader...." );
}
}
/**
* 具体产品
* @author ilmlife
* <pre>2013 -12- 3下午10:38:09</pre>
*/
public class JpgReader extends ImageReader {
@Override
public void reader() {
System. out.println("jpg image reader...." );
}
}
/**
* 具体工厂
* @author ilmlife
* <pre>2013 -12- 3下午10:37:55</pre>
*/
public class GifReaderFactory extends ImageReaderFactory {
@Override
public ImageReader createReaderImage() {
return new GifReader();
}
}
/**
* 具体工厂
* @author ilmlife
* <pre>2013 -12- 3下午10:38:20</pre>
*/
public class JpgReaderFactory extends ImageReaderFactory {
@Override
public ImageReader createReaderImage() {
return new JpgReader();
}
}
0 0
- 设计模式学习—工厂方法模式
- 设计模式学习笔记——简单工厂模式、工厂方法模式、抽象工厂模式
- 学习设计模式-方法工厂设计模式
- Head First 设计模式学习——简单工厂方法-工厂方法模式-抽象工厂模式
- 学习设计模式——工厂方法
- 设计思想学习—工厂方法模式
- 设计模式学习--工厂方法
- 设计模式入门学习之工厂模式(工厂方法模式)
- 设计模式入门学习之工厂模式(工厂方法模式)
- 设计模式学习--工厂方法模式
- 设计模式学习----工厂方法模式
- 设计模式 学习之工厂方法模式
- 【设计模式】工厂方法模式学习笔记
- 设计模式学习--工厂方法模式
- 设计模式学习-----工厂方法模式
- 设计模式学习笔记-工厂方法模式
- 设计模式学习之---工厂方法模式
- 设计模式学习笔记--工厂方法模式
- sublime-TEXT3安装Package
- 小强的HTML5移动开发之路(18)——HTML5地理定位
- AS3.0 String转换成数值时的判断
- WinCE驱动的动态加载
- 黑马程序员_Java基础_02
- 设计模式学习—工厂方法模式
- GIT 开始一次旅行 二 (git 本地基本 操作)
- Hadoop源码分析之NameNode的目录构成与类继承结构
- Struts2 iterator 标签遍历 Map,List,数组
- C语言面向对象编程(一):封装与继承
- Android SD卡操作
- 使用DSPBIOS的CCS工程设置(独家!)
- 设计模式学习—抽象工厂模式
- UITableView的滑动问题