抽象工厂笔记
定义

结构

例子
用于创建一系列关联的对象,要用抽象类作为工厂,设置好方法,但是具体创建什么样的对象留到子类去实现.
public abstract class AbstractFactory {
    abstract  Object factoryMethod(String type);
}
//两个实现类根据输入的字符串创建了不同的对象.
public class AbstractFactoryA extends AbstractFactory{
    @Override
    Object factoryMethod(String type) {
        Pizza pizza = null;
        if (type.equals("A"))
            pizza = new PizzaA();
        else if (type.equals("B"))
            pizza = new PizzaB();
        else if (type.equals("C"))
            pizza = new PizzaC();
        return pizza;
    }
}
public class AbstractFactoryB extends  AbstractFactory {
    @Override
    Object factoryMethod(String type) {
        Pizza pizza = null;
        if (type.equals("A"))
            pizza = new PizzaC();
        else if (type.equals("B"))
            pizza = new PizzaB();
        else if (type.equals("C"))
            pizza = new PizzaA();
        return pizza;
    }
}
都实现了工厂方法,但是根据传入对象的不同会产生不同的对象
public class PizzaStore {
   public static void main(String[] args) {
        AbstractFactory a=new AbstractFactoryA();
        AbstractFactory b=new AbstractFactoryB();
        PizzaStore store1 = new PizzaStore(a);
        Pizza pizza1 = store1.orderPizza("A1");
        PizzaStore store2= new PizzaStore(b);
        Pizza pizza2 = store2.orderPizza("A");
    }
   AbstractFactory factory;
    public PizzaStore(AbstractFactory f ){
        this.factory=f;
    }
    //点一个Pizza
    public Pizza orderPizza(String type){
        Pizza pizza =(Pizza)factory.factoryMethod(type);
        System.out.println(type);
        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();
        return null;
    }
}

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号