§1 概念

- 产品族:华为既有华为手机,也有华为电脑、华为平板,华为手机、华为电脑和华为平板属于一个产品族,因为他们都是华为品牌。
- 产品等级:有华为手机,也有苹果手机、小米手机,他们属于一个产品等级,因为他们都是手机,属于手机等级。
- 抽象工厂模式和工厂方法模式的区别在于,工厂方法模式中的工厂创建的具体产品属于同一个产品等级,如:咖啡工厂可以制作美式咖啡、拿铁咖啡,但是不能制作甜点;而抽象工厂模式中的工厂创建的具体产品属于同一个产品族,如华为工厂只生产华为手机、华为电脑、华为平板等,不能生产苹果手机、苹果电脑等。
§2 角色
- 抽象产品:定义产品的规范,描述产品的特性和功能,抽象工厂模式可能存在多个抽象产品,如:咖啡、甜点等。
- 具体产品:实现或继承抽象产品的子类,如:咖啡有美式咖啡、拿铁咖啡,甜点有提拉米苏、抹茶慕斯。
- 抽象工厂:提供创建产品的接口,可以创建不同产品等级的产品,如:甜品工厂既可以制作咖啡,也可以制作甜点。
- 具体工厂:实现抽象工厂接口,完成对某一个产品族产品的生产,如:美式风味甜品工厂制作美式咖啡和抹茶慕斯,意大利风味甜品工厂制作拿铁咖啡和提拉米苏。
§3 甜品店案例
§3.1 类图

§3.2 实现
public abstract class Coffee {
public abstract String getName();
public void getMilk() {
System.out.println("加牛奶");
}
public void addSugar() {
System.out.println("加糖");
}
}
public abstract class Dessert {
public abstract void show();
}
public class AmericanCoffee extends Coffee {
@Override
public String getName() {
return "美式咖啡";
}
}
public class LatteCoffee extends Coffee {
@Override
public String getName() {
return "拿铁咖啡";
}
}
public class Tiramisu extends Dessert {
@Override
public void show() {
System.out.println("提拉米苏");
}
}
public class MatchaMousse extends Dessert {
@Override
public void show() {
System.out.println("抹茶慕斯");
}
}
public interface DessertFactory {
Coffee createCoffee();
Dessert createDessert();
}
public class AmericanDessertFactory implements DessertFactory {
@Override
public Coffee createCoffee() {
return new AmericanCoffee();
}
@Override
public Dessert createDessert() {
return new MatchaMousse();
}
}
public class ItalyDessertFactory implements DessertFactory {
@Override
public Coffee createCoffee() {
return new LatteCoffee();
}
@Override
public Dessert createDessert() {
return new Tiramisu();
}
}
public class Client {
public static void main(String[] args) {
AmericanDessertFactory factory = new AmericanDessertFactory();
Coffee coffee = factory.createCoffee();
Dessert dessert = factory.createDessert();
System.out.println(coffee.getName());
dessert.show();
}
}

- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
§4 优缺点
- 优点:保证客户端使用的是同一个产品族的产品。
- 缺点:当产品族种新增一种产品时,所有的工厂类都需要进行修改。