Featured image of post Java设计模式-抽象工厂模式AbstractFactory

Java设计模式-抽象工厂模式AbstractFactory

相关文章

【合集】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()

皖ICP备2024056275号-1
发表了78篇文章 · 总计149.56k字
本站已稳定运行