抽象工厂模式.doc_第1页
抽象工厂模式.doc_第2页
抽象工厂模式.doc_第3页
抽象工厂模式.doc_第4页
抽象工厂模式.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【抽象工厂模式应用场景举例】写到抽象工厂模式了,我深知“抽象工厂模式”博文会带来一点点高潮,因为程序员对工厂模式中的“抽象工厂”都是比较感冒的,而且关注也很多,我就尽量用我所能理解的那么点程度来给大家介绍这个模式,如果有更好的比喻还请网友指正,先感谢了!设计模式-快餐简解-【工厂方法模式】 介绍了工厂方法的使用,从那个程序中可以看到,奥迪audi车是从audi_car_factory_imple工厂中创建出来的,而大众3W车是从threeW_car_factory_imple工厂中创建出来的,那么如果这2家汽车生产大厂由总部在北京市,现在发展到上海,深圳等城市创建生气汽车的分厂,该怎么办?是不是得将原来的奥迪汽车工厂类:public class audi_car_factory_imple implements Icar_factory public Icar_interface create_car() car_audi_imple car_audi_imple_ref = new car_audi_imple(); car_audi_imple_ref.setName(奥迪A6); car_audi_imple_ref.setSpeed(300); return car_audi_imple_ref; 改成类似如下的模样:public class audi_car_factory_imple implements Icar_factory public Icar_interface create_car(String area_car) if (area_car.equals(北京)创建一个北京的奥迪汽车if (area_car.equals(上海)创建一个上海的奥迪汽车if (area_car.equals(深圳)创建一个深圳的奥迪汽车 return car_audi_imple_ref; 那么发现一个问题,不同地域的汽车却在一个工厂中出现,这是不合乎常理的,因为北京奥迪在北京分厂创建,上海奥迪在上海分厂创建,这样才对。 所以如果遇到分“大系”来创建对象的时候,抽象工厂方法是肯定要使用的时候了。这里的大系指的就是从地域上来分。 这个例子就应该以“用抽象工厂来定义具体工厂的抽象,而由具体工厂来创建对象” 比如在玩“极品飞车”这款游戏,每个地图处都有造车的工厂,每个造车的工厂都因为有造车的档次不同而划分为高级车厂,低级车厂,那么这样的场景正是应用抽象工厂的好时机,再来理解一下这句话“用抽象工厂来定义具体工厂的抽象,而由具体工厂来创建对象”,用抽象造车工厂来定义具体造车工厂的抽象,而由具体的造车工厂来创建汽车,这就是抽象工厂与工厂方法的不同,工厂方法中对象的创建是由工厂方法来确定的,创建的对象都是不分类并且实现一个接口的,而抽象工厂就是在工厂方法的基础上对创建车的对象的行为进行分类,比如北【抽象工厂模式解释】 类型:创建模式 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 【抽象工厂模式UML图】京车厂,上海车厂等。【抽象工厂模式-JAVA代码实现】 新建抽象工厂接口:package car_factory_interface;import car_interface.Icar_interface;public interface Icar_factory public Icar_interface create_threeW_car(); public Icar_interface create_audi_car(); 新建抽象工厂接口的高级车adv工厂实现类:package car_factory_imple;import car_factory_interface.Icar_factory;import car_imple.car_3w_imple_adv;import car_imple.car_audi_imple_adv;import car_interface.Icar_interface;public class car_factory_adv implements Icar_factory public Icar_interface create_audi_car() car_audi_imple_adv car_audi_imple_adv = new car_audi_imple_adv(); car_audi_imple_adv.setName(奥迪A6); car_audi_imple_adv.setSpeed(300); return car_audi_imple_adv; public Icar_interface create_threeW_car() car_3w_imple_adv car_3w_imple_adv_ref = new car_3w_imple_adv(); car_3w_imple_adv_ref.setName(大众A6); car_3w_imple_adv_ref.setSpeed(300); return car_3w_imple_adv_ref; 新建抽象工厂接口的普通车low工厂实现类:package car_factory_imple;import car_factory_interface.Icar_factory;import car_imple.car_3w_imple_low;import car_imple.car_audi_imple_low;import car_interface.Icar_interface;public class car_factory_low implements Icar_factory public Icar_interface create_audi_car() car_audi_imple_low car_audi_imple_low_ref = new car_audi_imple_low(); car_audi_imple_low_ref.setName(奥迪A6); car_audi_imple_low_ref.setSpeed(300); return car_audi_imple_low_ref; public Icar_interface create_threeW_car() car_3w_imple_low car_3w_imple_low_ref = new car_3w_imple_low(); car_3w_imple_low_ref.setName(大众A6); car_3w_imple_low_ref.setSpeed(300); return car_3w_imple_low_ref; 上面已经有抽象工厂和具体工厂的实现类了。 新建汽车接口:package car_interface;public interface Icar_interface public void start(); public void stop(); 新建汽车父类:package car_imple;import car_interface.Icar_interface;public class base_car_imple implements Icar_interface private int speed; private String name; public int getSpeed() return speed; public void setSpeed(int speed) this.speed = speed; public String getName() return name; public void setName(String name) = name; public void start() / TODO Auto-generated method stub public void stop() / TODO Auto-generated method stub 新建大众高级车:package car_imple;import car_interface.Icar_interface;public class car_3w_imple_adv extends base_car_imple public void start() System.out.println(富华版: + this.getName() + 车以专利技术起动了最高速度为: + this.getSpeed(); public void stop() System.out.println(富华版: + this.getName() + 车以专利技术停车了); 新建大众普通车:package car_imple;import car_interface.Icar_interface;public class car_3w_imple_low extends base_car_imple public void start() System.out.println(普通版: + this.getName() + 车以专利技术起动了最高速度为: + this.getSpeed(); public void stop() System.out.println(普通版: + this.getName() + 车以专利技术停车了); 新建大众普通车:package car_imple;import car_interface.Icar_interface;public class car_audi_imple_adv extends base_car_imple public void start() System.out.println(富华版: + this.getName() + 车以专利技术起动了最高速度为: + this.getSpeed(); public void stop() System.out.println(富华版: + this.getName() + 车以专利技术停车了); 新建奥迪普通车:package car_imple;import car_interface.Icar_interface;public class car_audi_imple_low extends base_car_imple public void start() System.out.println(普通版: + this.getName() + 车以专利技术起动了最高速度为: + this.getSpeed(); public void stop() System.out.println(普通版: + this.getName() + 车以专利技术停车了); 新建客户端运行类:package run_main;import car_factory_imple.car_factory_adv;import car_factory_interface.Icar_factory;import car_interface.Icar_interface;public class run_main public static void main(String args) Icar_factory Icar_factory_ref = new car_factory_adv(); Icar_interface Icar_interface_ref = Icar_factory_ref .create_threeW_car(); Icar_interface_ref.start(); Icar_interface_ref.stop(); 程序运行结果如下:富华版:大众A6 车以专利技术起动了最高速度为:300富华版:大众A6 车以专利技术停车了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论