抽象工厂模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了抽象工厂模式相关的知识,希望对你有一定的参考价值。
抽象工厂模式属于创建型模式
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
主要解决:主要解决接口选择的问题。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的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 可能生成另一组产品,如牛奶、杯子。
因此工厂方法模式、抽象工厂模式最大的区别在于:
工厂方法模式:针对的是一个产品等级结构。
抽象工厂模式:针对多个产品等级结构。
以上是关于抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章