由歌词引发的模式思考之上篇(FactoryMethod模式)
来源:互联网 发布:linux添加用户命令 编辑:程序博客网 时间:2024/04/29 21:24
“老张开车去东北 撞了 肇事司机耍流氓 跑了 多亏一个东北人 送到医院缝五针 好了 ……翠花,上酸菜”
“老张开车去东北”,OK,这里如果我们刻意的用OO思想来看的话,老张这次是开车去的,下次就有很可能开飞机去的……这里请允许我刻意的这样的思考这个问题,因为刻意的这样思考,我们可以从这句话发现两个蕴含的设计模式,一个是FactoryMethod,一个是AbstractFactory。
一、FactoryMethod
FactoryMethod模式
OK,回到这句歌词,正如上面所说的,这次开车,下次开飞机……所以我们要思考出一种不管是车还是飞机或者火车,我们的程序都能灵活的适应需求的变化,这里就会用到FactoryMethod模式。
1 public interface Moveable {2 void run();3 }
1 public class Car implements Moveable {2 3 @Override4 public void run() {5 System.out.println("car run");6 }7 8 }
1 public class Plane implements Moveable {2 3 @Override4 public void run() {5 System.out.println("plane fly");6 }7 8 }
1 public abstract class VicheleFactory {2 abstract Moveable create();3 }
1 public class CarFactory extends VicheleFactory {2 3 @Override4 public Moveable create() {5 return new Car();6 }7 8 }
1 public class PlaneFactory extends VicheleFactory {2 3 @Override4 public Moveable create() {5 return new Plane();6 }7 8 }
1 public class Test {2 public static void main(String[] args) {3 // VicheleFactory factory = new CarFactory();4 VicheleFactory factory = new PlaneFactory();5 Moveable m = factory.create();6 m.run();7 }8 }
所有的工厂以及产品都有自己的父类,这个父类规定好自己的子类的方法特性,可以任意的扩展,这样测试类调用的时候只需要做小小的改动就可以响应需求的变化。
FactoryMethod类结构
由图可知,工厂和产品的父类处于相互平行的层次,而具体实现工厂和具体实现产品又是一种平行的层次,同时还存在一种生产关系。
关注中篇。
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 由歌词引发的模式思考之上篇(FactoryMethod模式)
- 由歌词引发的模式思考之中篇(AbstractFactory模式)
- 由歌词引发的模式思考之下篇(模拟Spring的BeanFactory)
- 由延时加载的单例模式引发的思考
- 设计模式思考-AbstractFactory/FactoryMethod
- 浅析设计模式之FactoryMethod
- 创建型模式之FactoryMethod
- 由星座判断引发我对vue.js的思考问题的模式的基本启示
- 设计模式之--工厂方法模式(FactoryMethod )
- 设计模式之工厂方法模式(FactoryMethod)
- 关于装饰模式引发的思考
- 由InvocationTargetException引发的思考
- 由BigDecimal引发的思考
- 由IsPostBack引发的思考
- 由InvocationTargetException引发的思考
- 由B2C引发的思考
- 由cursor引发的思考
- 由size_t引发的思考
- hdu 1874(畅通工程续)
- Java的运算符(转载从网络)
- CareerCup-1.4
- Jetty服务器报错
- javascript高级程序设计学习笔记
- 由歌词引发的模式思考之上篇(FactoryMethod模式)
- 如何用cocos2d-x来做一个基于TileMap地图块的游戏 (一)
- Hibernate中*.hbm.xml文件让其自动读取数据库默认值
- 25 个超强的 CSS3 用户界面开发教程
- hdu 1431(素数回文)
- POJ 3624 Charm Bracelet
- nyoj 78 圈水池 凸包问题 篱笆问题
- pdo数据抽象层
- hdu 1846 Brave Game