阅读 53

JAVA 设计模式抽象工厂模式

抽象工厂UML类图

这里写图片描述

上一片我们写了工厂方法模式,我们大致了解了他的运作原理,那么我们具体分析一下工厂方法模式和抽象工厂模式的区别吧

工厂方法模式:
一个抽象产品类,可以派生出多个具体产品类

一个抽象工厂类,可以派生出多个具体工厂类

每个具体工厂类只能创建一个具体产品的实例

抽象工厂模式:

多个抽象产品类,每个抽象产品可以派生出多个具体产品类

一个抽象工厂类,可以派生出多个具体工厂类

每个具体工厂类可以创建多个具体产品类的实例

区别:

工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个

工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个

知道了具体区别,下面看一个抽象工厂类的具体实例吧

//抽象产品类
public abstract class ProductA {
    /**
     * 每个具体产品子类需要实现的方法
     * @return
     */
    public abstract String method();
}12345678复制代码
//抽象产品类
public abstract class ProductB {
    /**
     * 每个具体产品子类需要实现的方法
     * @return
     */
    public abstract String method();
}12345678复制代码
//具体产品
public class ConcreteProductA1 extends ProductA {
    @Override
    public String method() {
        return "我是具体产品A1";
    }
}1234567复制代码
//具体产品
public class ConcreteProductA2 extends ProductA {
    @Override
    public String method() {
        return "我是具体产品A2";
    }
}1234567复制代码
//具体产品
public class ConcreteProductB1 extends ProductB {
    @Override
    public String method() {
        return "我是具体产品B1";
    }
}1234567复制代码
//具体产品
public class ConcreteProductB2 extends ProductB {
    @Override
    public String method() {
        return "具体产品B2";
    }
}
12345678复制代码
//抽象工厂
public abstract class AbstractFactory {

    /**
     * 创建A的方法
     * @return
     */
    public abstract ProductA createproductA();


    /**
     * 创建B的方法
     * @return
     */
    public abstract ProductB createproductB();
}1234567891011121314151617复制代码
//具体工厂
public class ConcreteFactory1 extends AbstractFactory {
    @Override
    public ProductA createproductA() {
        return new ConcreteProductA1();
    }

    @Override
    public ProductB createproductB() {
        return new ConcreteProductB1();
    }
}123456789101112复制代码
//具体工厂
public class ConcreteFactory2 extends AbstractFactory {
    @Override
    public ProductA createproductA() {
        return new ConcreteProductA2();
    }

    @Override
    public ProductB createproductB() {
        return new ConcreteProductB2();
    }
}123456789101112复制代码

具体调用

public class AbFactoryActivity extends BaseActivity {

    @Override
    public int setMainView() {
        return R.layout.activity_ab_factory;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setToobarTitle("抽象工厂模式");
        TextView textView = (TextView) findViewById(R.id.abfactory_text1);
        TextView textView1 = (TextView) findViewById(R.id.abfactory_text2);
        ConcreteFactory1 concreteFactory1 = new ConcreteFactory1();
        String method = concreteFactory1.createproductA().method();
        String method1 = concreteFactory1.createproductB().method();
        textView.setText(method + method1);

        ConcreteFactory2 concreteFactory2 = new ConcreteFactory2();
        String method2 = concreteFactory2.createproductA().method();
        String method3 = concreteFactory2.createproductB().method();
        textView1.setText(method2 + method3);


    }

}复制代码