抽象工厂模式
来源:互联网 发布:五子棋人工智能算法 编辑:程序博客网 时间:2024/05/16 01:18
抽象工厂模式属于创建型模式
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的Creator里加代码,又要在具体的里面加代码。
UML图如下:
// 抽象食物interface Food { public String getFoodName();}// 抽象餐具interface TableWare { public String getToolName();}// 抽象工厂interface KitchenFactory { public Food getFood(); public TableWare getTableWare();}//具体食物 Apple 的定义如下class Apple implements Food{ public String getFoodName() { return "apple"; }}//具体餐具 Knife 的定义如下class Knife implements TableWare { public String getToolName() { return "knife"; }}// 以具体工厂 AKitchen 为例class AKitchen implements KitchenFactory { public Food getFood() { return new Apple(); } public TableWare getTableWare() { return new Knife(); }}// 客户public class Customer { public void eat(KitchenFactory k) { System.out.println("A foodaholic is eating "+ k.getFood().getFoodName() + " with " + k.getTableWare().getToolName() ); } public static void main(String[] args) { Customer c = new Customer(); KitchenFactory kf = new AKitchen(); c.eat(kf); }}
工厂方法模式、抽象工厂模式区别:
首先先看两个概念:
产品等级结构:比如一个抽象类是食物,其子类有苹果、牛奶等等,则抽象食物与具体食物名称之间构成了一个产品等级结构。食物是抽象的父类,而具体的食物名称是其子类。
产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。如 AKitchen 生产的苹果、刀子,苹果属于食物产品等级结构中,而刀子则属于餐具产品等级结构中。而 BKitchen 可能生成另一组产品,如牛奶、杯子。
因此工厂方法模式、抽象工厂模式最大的区别在于:
工厂方法模式:针对的是一个产品等级结构。
抽象工厂模式:针对多个产品等级结构。
1 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 在布局文件中为 Activity 定义片段--frgament
- 数据库之SQL
- Hessian
- 你是我的眼:水哥王昱珩带你重新打量这世界
- HttpURLConnection的使用
- 抽象工厂模式
- 新浪sina gitlab邮件收不到
- java集合框架
- HDU 2389 Rain on your Parade(Hopcroft-Carp算法模板)
- 每个人都需要的中文排版指南
- Linux命令--touch
- Vue.js 相关问题
- 生产者消费者——一对一
- Mac Pro® Rackmount Kit