抽象工厂模式

1.简介

它提供一个接口,用于创建相关或依赖对象的家族,而不需要明确的指定具体类。

2.小栗子(原料工厂)

需求:各个地区pizza店,需要相同类型,不同风格的原料

3.代码实现

3.1 面团,各个地区的面团可能不同
public interface Dough {    // 面团抽象类
    public abstract String getName();
}

public class SeattleDough implements Dough {    // 西雅图面团
    @Override
    public String getName() {
        return "Seattle Dough";
    }
}

public class NYDough implements Dough { // 纽约面团
    @Override
    public String getName() {
        return "NY Dough";
    }
}
3.2 酱汁,各个地区的酱汁味道可能不同
public interface Sauce {    // 酱汁抽象类
    public abstract String getName();
}

public class SeattleSauce implements Sauce {    // 西雅图酱汁
    @Override
    public String getName() {
        return "Seattle Sauce";
    }
}

public class NYSauce implements Sauce {     // 纽约酱汁
    @Override
    public String getName() {
        return "NY Sauce";
    }
}
3.3 原料工厂
public interface PizzaIngredientFactory {   // 原料抽象工厂
    public abstract Dough createDough();
    public abstract Sauce createSauce();
}

// 西雅图原料工厂
public class SeattlePizzaIngredientFactory implements PizzaIngredientFactory {
    @Override
    public Dough createDough() {
        return new SeattleDough();
    }

    @Override
    public Sauce createSauce() {
        return new SeattleSauce();
    }
}

// 纽约原料工厂
public class NYPizzaIngredientFactory implements PizzaIngredientFactory {
    @Override
    public Dough createDough() {
        return new NYDough();
    }

    @Override
    public Sauce createSauce() {
        return new NYSauce();
    }
}

4.测试

public class AbstractFactoryDemo {
    public static void main(String[] args) {
        PizzaIngredientFactory nyFactory = new NYPizzaIngredientFactory();
        Dough nyDough = nyFactory.createDough();
        System.out.println(nyDough.getName());

        PizzaIngredientFactory seattleFactory = new SeattlePizzaIngredientFactory();
        Dough seattleDough = seattleFactory.createDough();
        System.out.println(seattleDough.getName());
    }
}

你可能感兴趣的:(抽象工厂模式)