相关文章
【合集】Java设计模式
概括
抽象工厂通过多个抽象方法创建多个不同的产品。
从而实现:将产品分家族、分系列,同一家族或系列的产品,在同一个工厂里提供创建能力。
示例
甜品工厂接口
1
2
3
4
|
public interface DessertFactory {
Coffee createCoffee();
Dessert createDessert();
}
|
具体工厂-美式甜品
1
2
3
4
5
6
7
8
|
public static class AmericanDessertFactory implements DessertFactory {
public Coffee createCoffee() {
return new AmericanoCoffee();
}
public Dessert createDessert() {
return new MatchaMousse();
}
}
|
具体工厂-意式甜品
1
2
3
4
5
6
7
8
|
public static class ItalyDessertFactory implements DessertFactory {
public Coffee createCoffee() {
return new LatteCoffee();
}
public Dessert createDessert() {
return new Tiramisu();
}
}
|
咖啡抽象类
1
2
3
|
public abstract static class Coffee {
public abstract String getName();
}
|
具体咖啡类-美式咖啡
1
2
3
4
5
6
|
public static class AmericanoCoffee extends Coffee {
@Override
public String getName() {
return "美式咖啡";
}
}
|
具体咖啡类-拿铁咖啡
1
2
3
4
5
6
|
public static class LatteCoffee extends Coffee {
@Override
public String getName() {
return "拿铁咖啡";
}
}
|
甜品抽象类
1
2
3
|
public abstract static class Dessert {
public abstract void show();
}
|
具体甜品类-抹茶慕斯
1
2
3
4
5
6
|
public static class MatchaMousse extends Dessert {
@Override
public void show() {
System.out.println("抹茶慕斯");
}
}
|
具体甜品类-提拉米苏
1
2
3
4
5
6
|
public static class Tiramisu extends Dessert {
@Override
public void show() {
System.out.println("提拉米苏");
}
}
|
客户端调用
美式甜品工厂可以创建:美式咖啡 和 抹茶慕斯
1
2
3
|
AmericanDessertFactory americanDessertFactory = new AmericanDessertFactory();
Coffee americano = americanDessertFactory.createCoffee();
Dessert matchaMousse = americanDessertFactory.createDessert();
|
意式甜品工厂可以创建:拿铁咖啡 和 提拉米苏
1
2
3
|
ItalyDessertFactory italyDessertFactory = new ItalyDessertFactory();
Coffee latte = italyDessertFactory.createCoffee();
Dessert tiramisu = italyDessertFactory.createDessert();
|
场景应用
List迭代器
抽象工厂List
具体工厂ArrayList
抽象产品Iterator
具体产品ArrayList.Itr
工厂方法:List#iterator()