JAVA 设计模式抽象工厂模式

来源:互联网 发布:安卓调音软件 编辑:程序博客网 时间:2024/06/03 19:45

抽象工厂UML类图

这里写图片描述

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

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

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

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

抽象工厂模式:

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

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

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

区别:

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

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

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

//抽象产品类public abstract class ProductA {    /**     * 每个具体产品子类需要实现的方法     * @return     */    public abstract String method();}
//抽象产品类public abstract class ProductB {    /**     * 每个具体产品子类需要实现的方法     * @return     */    public abstract String method();}
//具体产品public class ConcreteProductA1 extends ProductA {    @Override    public String method() {        return "我是具体产品A1";    }}
//具体产品public class ConcreteProductA2 extends ProductA {    @Override    public String method() {        return "我是具体产品A2";    }}
//具体产品public class ConcreteProductB1 extends ProductB {    @Override    public String method() {        return "我是具体产品B1";    }}
//具体产品public class ConcreteProductB2 extends ProductB {    @Override    public String method() {        return "具体产品B2";    }}
//抽象工厂public abstract class AbstractFactory {    /**     * 创建A的方法     * @return     */    public abstract ProductA createproductA();    /**     * 创建B的方法     * @return     */    public abstract ProductB createproductB();}
//具体工厂public class ConcreteFactory1 extends AbstractFactory {    @Override    public ProductA createproductA() {        return new ConcreteProductA1();    }    @Override    public ProductB createproductB() {        return new ConcreteProductB1();    }}
//具体工厂public class ConcreteFactory2 extends AbstractFactory {    @Override    public ProductA createproductA() {        return new ConcreteProductA2();    }    @Override    public ProductB createproductB() {        return new ConcreteProductB2();    }}

具体调用

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);    }}
原创粉丝点击