设计模式抽象工厂模式

抽象工厂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);


    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值