JAVA设计模式之二抽象工厂
2016-06-15 11:30
211 查看
上一篇我们讲到了工厂方法模式,而通过例子以及实践,原有的工厂方法模式有一个问题,那就是如果需要拓展方法就必须对工厂类进行修改,这就违背了闭包原则。因此,对于需求的不断变化,那应生新的方法去解决问题,这就引入了抽象工厂模式。而抽象工厂只是在原有的工厂方法就行了调整,多出了一个接口用于拓展,这样如果出现新的需求就不用去修改原来工厂接口了,具体还是用代码来说明。
首先还是搭建工厂接口:
接着是两个实现:
[align=left]然后提供一个新的接口,用于满足新的需求,这里就不去修改原有的工厂接口了。[/align]
[align=left]接着是两个工厂类:[/align]
[align=left]最后是测试:[/align]
[align=left]得到的结果是:我生产的是奥迪车[/align]
[align=left]总结:这个抽象工厂看起来有点多此一举,为了新的方法而再去创建一个接口来实现。但在实际项目中这样做才符合了闭包原则,最简单的,最简单,两种车都需要上色,但是车型不同上色需要的材料以及方式都不一样,这时候就需要修改一下新的工厂类方法即可,就不用去修改之前的代码结构了。当然总归还是得根据实际项目需求进行吧,但鉴于可拓展性还是建议使用抽象工厂,虽然他看起来不是那么好理解。[/align]
首先还是搭建工厂接口:
public interface FactoryInter { public void produce(); }
接着是两个实现:
public class BMWProduce implements FactoryInter{ @Override public void produce() { System. out.println("我生产的是宝马车" ); } }
public class AudiProduce implements FactoryInter{ @Override public void produce() { System. out.println("我生产的是奥迪车" ); } }
[align=left]然后提供一个新的接口,用于满足新的需求,这里就不去修改原有的工厂接口了。[/align]
public interface CarFactoryInter { public FactoryInter buildCar(); }
[align=left]接着是两个工厂类:[/align]
public class BMWFactory implements CarFactoryInter{ @Override public FactoryInter buildCar() { // TODO Auto-generated method stub return new BMWProduce(); } }
public class AudiFactory implements CarFactoryInter{ @Override public FactoryInter buildCar() { // TODO Auto-generated method stub return new AudiProduce(); } }
[align=left]最后是测试:[/align]
public class testAbstractFactory { public static void main(String[] args) { CarFactoryInter carFactory=new AudiFactory(); FactoryInter factory= carFactory.buildCar(); factory.produce(); } }
[align=left]得到的结果是:我生产的是奥迪车[/align]
[align=left]总结:这个抽象工厂看起来有点多此一举,为了新的方法而再去创建一个接口来实现。但在实际项目中这样做才符合了闭包原则,最简单的,最简单,两种车都需要上色,但是车型不同上色需要的材料以及方式都不一样,这时候就需要修改一下新的工厂类方法即可,就不用去修改之前的代码结构了。当然总归还是得根据实际项目需求进行吧,但鉴于可拓展性还是建议使用抽象工厂,虽然他看起来不是那么好理解。[/align]
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树