Java设计模式之抽象工厂模式
来源:互联网 发布:网狐棋牌源码 编辑:程序博客网 时间:2024/05/19 17:56
抽象工厂(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(); }}
阅读全文
0 0
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- 【Java设计模式】之抽象工厂模式
- java设计模式 之 抽象工厂模式
- Java--设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- 设计模式之JAVA----抽象工厂模式
- java设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式之抽象工厂模式
- 《Java设计模式》之抽象工厂模式
- Java设计模式之抽象工厂模式
- java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- Java设计模式之抽象工厂模式
- Python简明教程(一)数据类型、逻辑控制、函数
- 扬州游记_2017
- Win10 去掉桌面快捷方式小箭头
- Codeforces Round #432 C. Five Dimensional Points
- hdu 4763 kmp的简单应用
- Java设计模式之抽象工厂模式
- 利用TensorFlow实现VGG16
- 常见的HTTP相应状态码
- 什么是协方差矩阵?
- JAVA在win10环境下配置环境变量
- Java经典面试题(其一)——Java异常和克隆
- js页面加载触发事件
- Leetcode #3. Longest Substring Without Repeating Characters
- 【opencv学习之九】opencv3.2配置opencv_contrib方法