设计模式之抽象工厂模式

2018-09-07  本文已影响7人  tanoak
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

UML

public interface Creator {
    /**
     * 创建产品A
     * @return ProductA
     */
    ProductA createProductA();

    /**
     * 创建产品B
     * @return ProductB
     */
    ProductB createProductB();
}
public class ConcreteCreator1 implements Creator {


    @Override
    public ProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public ProductB createProductB() {

        return new ProductB1();
    }
}
public class ConcreteCreator2 implements Creator {


    @Override
    public ProductA createProductA() {
        return new ProductA2();
    }

    @Override
    public ProductB createProductB() {

        return new ProductB2();
    }
}

public interface ProductA {
    void methodA();
}


public class ProductA1 implements ProductA{
    @Override
    public void methodA() {
        System.out.println("A产品1型号");
    }
}

public class ProductA2 implements ProductA{
    @Override
    public void methodA() {
        System.out.println(" A产品2型号");
    }
}
public interface ProductB {
    void methodB();
}
public class ProductB1 implements ProductB{
    @Override
    public void methodB() {
        System.out.println("B产品1型号");
    }
}
public class ProductB2 implements ProductB{
    @Override
    public void methodB() {
        System.out.println("B产品2型号");
    }
}
public class Main{

    public static void main(String[] args) {
//      Creator creator = new ConcreteCreator2();
        Creator creator = new ConcreteCreator1();
        ProductA productA = creator.createProductA();
        ProductB productB = creator.createProductB();
        productA.methodA();
        productB.methodB();

        /**
         *  creator = new ConcreteCreator2();
         *         productA = creator.createProductA();
         *         productB = creator.createProductB();
         *         productA.methodA();
         *         productB.methodB();
         */
    }
}

上面代码满足了解耦合与开闭原则,但是也带来了新的问题

上一篇 下一篇

猜你喜欢

热点阅读