抽象工厂模式android,【设计模式与Android】抽象工厂模式——嵌合体克隆工厂

什么是抽象工厂模式

所谓抽象工厂模式,就是为创建一组相关或者是互相依赖的对象提供一个接口,而不需要指定它们的具体类的设计模式。抽象工厂模式适用于一个对象族有相同的约束的情况,用不抽象的语言解释就是国内著名开发者服务商环信在Android和iOS平台都提供了IM SDK,尽管功能一样,但代码的实现逻辑是不同的,这就是抽象工厂模式。

抽象工厂模式的实现方式

尽管在讲工厂方法模式的时候我用化学知识举例,但那位技术编辑对我的理科生身份还是将信将疑,为了彻底消除他的疑惑,本文用生物知识“胚胎工程”举例,同时为了证明本文不是我的理科朋友捉刀代笔,本文中举例还要贴合他“海淀第一打野”的身份。

写代码之前我先带着大家复习一下“胚胎工程”和“嵌合体”:所谓胚胎工程,就是指对动物早期胚胎所进行的多种显微操作和处理技术;所谓嵌合体,就是利用胚胎工程将不同生物的胚胎进行胚胎分割移植制造出来的新生物。中华文化中的“龙”就可以视为给鳄鱼或蟒蛇加上马的头、鹿的角的嵌合体,然后“虎背熊腰”、“狼心狗肺”、“獐头鼠目”、“牛头马面”等都可以视为给人加上动物器官的嵌合体。

首先定义一个抽象的克隆人工厂类:public abstract classCopyFactory {public abstractIHead createHead();public abstractIBody createBody();

}

抽象产品——克隆的头部胚胎:public interfaceIHead {voidgetHead();

}

抽象产品——克隆的身体胚胎:public interfaceIBody {voidgetBody();

}

具体产品——克隆的牛头胚胎:public classCowHeadimplementsIHead {@Overridepublic voidgetHead() {

Log.e("CowHead","牛头~~");

}

}

具体产品——克隆的狗头胚胎:public classDogHeadimplementsIHead {@Overridepublic voidgetHead() {

Log.e("DogHead","狗头~~");

}

}

具体产品——克隆的人头胚胎:public classHumanHeadimplementsIHead {@Overridepublic voidgetHead() {

Log.e("HumanHead","人头~~");

}

}

具体产品——克隆的人身体胚胎:public classHumanBodyimplementsIBody {@Overridepublic voidgetBody() {

Log.e("HumanBody","~~人");

}

}

具体产品——克隆的狗身体胚胎:public classDogBodyimplementsIBody {@Overridepublic voidgetBody() {

Log.e("DogBody","~~狗");

}

}

具体工厂——克隆阿利斯塔的工厂:public classAlistarFactoryextendsCopyFactory {@OverridepublicIHead createHead() {return newCowHead();

}@OverridepublicIBody createBody() {return newHumanBody();

}

}

具体工厂——克隆内瑟斯的工厂:public classNasusFactoryextendsCopyFactory {@OverridepublicIHead createHead() {return newDogHead();

}@OverridepublicIBody createBody() {return newHumanBody();

}

}

具体工厂——克隆德莱厄斯的工厂:public classDariusFactoryextendsCopyFactory {@OverridepublicIHead createHead() {return newHumanHead();

}@OverridepublicIBody createBody() {return newDogBody();

}

}

他和其他9个召唤师凑在一起,玩一局匹配模式:Log.e("请问海淀第一打野 : ","阿利斯塔是什么生物?");

AlistarFactory alistarFactory =newAlistarFactory();

alistarFactory.createHead().getHead();

alistarFactory.createBody().getBody();

Log.e("请问海淀第一打野 : ","内瑟斯是什么生物?");

NasusFactory nasusFactory =newNasusFactory();

nasusFactory.createHead().getHead();

nasusFactory.createBody().getBody();

Log.e("请问海淀第一打野 : ","德莱厄斯是什么生物?");

DariusFactory dariusFactory =newDariusFactory();

dariusFactory.createHead().getHead();

dariusFactory.createBody().getBody();

海淀第一打野赢了游戏也相信了我的理工出身,读者也学会了抽象工厂模式,把以上代码认真实现一遍的人对着LogCat笑出了声。

Android源码中的抽象工厂模式

(1)Service的onBind

每个Service都是一个具体的工厂,每个Binder都是IBinder的具体产品。

(2)MediaPlayerFactory

MediaPlayerFactory是Android底层为创建不同的MediaPlayer所定义的一个类,每个MediaPlayer都实现了MediaPlayerFactory中的registerFactory_l方法。

Android开发中如何利用抽象工厂模式

(1)抽象工厂模式有一个显著的优点就是接口与实现的分离,切换产品类时非常灵活。在实现Android应用的换肤功能时,我们可以利用抽象工厂模式。

需要注意的几个问题

(1)抽象工厂模式的最大缺点就在于会产生比工厂方法模式更多的类文件。

(2)因为每增加一个新产品类都要修改抽象工厂,会造成每个具体工厂都要被修改,所以抽象工厂模式的产品类扩展麻烦。

本系列其他博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值