Android设计模式之抽象工厂

抽象工厂模式的定义

为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定它们的具体类。

抽象工厂的使用场景

一个对象族有相同的约束时可以使用抽象工厂模式。举个例子:

Android、ios、window phone下都有短信软件和拨号软件,两者都属于软件的范畴,但是它们所在的操作系统平台不一样,即便是同一家公司出品的软件,其代码的实现逻辑也是不同的,这时候就考虑使用抽象工厂方法模式来生产Android、ios、Window phone下的短信软件和拨号软件。

抽象工厂模式的类比较多,但是,主要分为四类:

1.AbstractFactory:抽象工厂角色, 它声明了一组用于创建一种产品的方法,每一种方法对应一种产品,如上述类图的AbsttractFactory中就定义了两个方法,分别创建产品A和产品B。

2.ConcreteFactory:具体工厂角色,它实现了在抽象工厂中定义的创建产品的方法,生成一组具体产品,这些产品构成了一个产品种类,每一个产品都位于某一个产品等级结构中,如上述类图的ConcreteFactory1和Concretefactory2。

3.AbstractProduct:抽象产品角色,他为每种产品声明接口,比如上述类图中的AbstratctProductA、AbstractProductB。

4.ConcreteProduct:具体产品角色,它定义具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法,如上述类图中的ConcreteProductA1、ConcreteProductA2、ConcreteProductB1、ConcreteProductB2。

抽象工厂方法模式的UML类图:

 

 

抽象工厂模式的优点:

一个显著的优点是分离接口 与 实现,客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已,使其从具体的产品实现中解耦,同时基于接口与实现的分离,使抽象工厂方法模式在切换产品种类时更加灵活、容易。

抽象工厂模式的缺点:

上面我们也有所提及,一是类文件的爆炸性增加,二是不太容易扩展新的产品类,因为每当我们增加一个产品类就需要修改其抽象工厂,那么所有的具体工厂类均会被修改。

 

抽象工厂方法模式在Android源码中实现相对来说比较少,我们说过Activity的onCreate方法其实就相当于一个工厂方法。

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(new LinearLayout(this));

}

同样,对于另外一个组件Service来说,其onBind方法也可以看做是一个工厂方法。

public class BaseService extends Service {

@Nullable

@Override

public IBinder onBind(Intent intent) {

return new Binder();

}

}

如果从framework的角度来看Activity和Service,都可以看做是一个具体的工厂。这样来看相对于一个抽象工厂方法模式的雏形也没有错。

 

参考《Android源码设计模式》

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值