Java设计模式之抽象工厂模式
2017-09-08 20:12
459 查看
抽象工厂(abstract factory)
概念:指当有多个抽象角色时,使用的一种工厂模式;抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象
优点:
1.隔离了具体类的生成,使得客户不需要知道什么被创建了
2.当一个产品族中的多个对象被设计成一起工作时,能保证客户端始终只使用一个产品族中的对象
适用:
1.一个系统要独立于它的产品的创建、组合和表示时。
2.一个系统要由多个产品系列中的一个来配置时。
3.当你强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示他们的接口而不是实现时。
普通工厂与抽象工厂的比较:
普通工厂的短处:产生产品系列的时候会很麻烦,工厂泛滥;
抽象工厂的短处:产生产品品种的时候要改动的地方太多;
案例代码:
实体:
/** * 抽象工厂 * 包含所有产品创建的抽象方法 * 可添加其他方法(生产其他品种) * @author 落尘曦 2017.9.8 */ public abstract class AbstractFactory { public abstract Vehicle createVehicle(); //创建交通工具 public abstract Food createFood();//创建食物 }
/** * 相当于AbstractProductA * @author 落尘曦 2017.9.8 */ public abstract class Vehicle { public abstract void run(); }
/** * 相当于AbstractProductB * @author 落尘曦 2017.9.8 */ public abstract class Food { public abstract void eat(); }
/** * 第一个具体工厂 * 相当于ConcreteFactory1 * 生产“车”和“苹果” * @author 落尘曦 2017.9.8 */ public class FirstFactory extends AbstractFactory{ //创建交通工具 public Vehicle createVehicle() { return new Car(); //返回汽车 } //创建食物 public Food createFood() { return new Apple(); //返回苹果 } }
/** * 第二个具体工厂 * 相当于ConcreteFactory1 * 生产“飞机”和“水” * @author 落尘曦 2017.9.8 */ public class SecondFactory extends AbstractFactory{ //创建交通工具 public Vehicle createVehicle() { return new Plane(); //返回飞机 } //创建食物 public Food createFood() { return new Water(); //返回水 } }
/** * 相当于ProductA1 * @author 落尘曦 2017.9.8 */ public class Car extends Vehicle{ public void run(){ System.out.println("开车..."); } }
/** * 相当于ProductA2 * @author 落尘曦 2017.9.8 */ public class Plane extends Vehicle{ public void run(){ System.out.println("开飞机..."); } }
/** * 相当于ProductB1 * @author 落尘曦 2017.9.8 */ public class Water extends Food{ public void eat(){ System.out.println("喝着水..."); } }
/** * 相当于ProductB2 * @author 落尘曦 2017.9.8 */ public class Apple extends Food{ public void eat(){ System.out.println("吃着苹果..."); } }
测试类:
/** * 抽象工厂模式的测试 * 系列产品(交通工具,食物...) * @author 落尘曦 2017.9.8 */ public class Test { public static void main(String[] args) { AbstractFactory f = new SecondFactory(); f.createVehicle().run(); f.createFood().eat(); } }
相关文章推荐
- JAVA设计模式是个什么玩意儿_02_抽象工厂模式
- JAVA设计模式之工厂模式之抽象工厂模式
- java设计模式之抽象工厂模式
- 走穿java23种设计模式-3抽象工厂模式详解
- Java设计模式--抽象工厂模式
- JAVA设计模式之3-抽象工厂模式
- JAVA设计模式之:工厂模式(下)--抽象工厂模式
- Java设计模式之从[星际争霸1]分析抽象工厂模式
- Java设计模式学习记录-抽象工厂模式
- JAVA设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式-抽象工厂模式(Abstract Factory )
- Java设计模式-抽象工厂模式
- JAVA设计模式之抽象工厂模式 (转)
- Java设计模式笔记(3)抽象工厂模式
- java设计模式_抽象工厂模式
- Java设计模式之抽象抽象工厂模式
- Java设计模式编程中简单工厂与抽象工厂模式的使用实例
- Java设计模式之抽象工厂模式实例详解
- Java设计模式之抽象工厂模式