Android中的设计模式之抽象工厂模式
参考
- 《设计模式解析》 第十一章 Abstract Factory模式
- 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式
- 《Android源码设计模式解析与实战》第6章 创建型设计模式--抽象工厂模式
意图
协调对象的实例化,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
我觉得就是在工厂方法模式里的工厂类再做一层抽象,从一维抽象升级为二维抽象,在纵向的基础上又加了横向。
别名
Kit
适用场景
- 一个系统要独立于它的产品创建,组合和表示时。
- 一个系统要由多个产品系列中的一个来配置时。
- 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
结构
- AbstracFactory: 抽象工厂,它声明了一组用于创建产品的方法,每一个方法对应一种产品。
- ConcreteFactory: 具体工厂,它实现了在抽象工厂中定义的创建产品的方法,生成一组具体产品,这些产品构成了一个产品种类,每一个产品都位于某个产品等级结构中。
- AbstractProduct: 抽象产品角色,他为每种产品声明接口
- ConcreteProduct: 具体产品角色,他定义了具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。
例子1 车厂造车
描述
奥迪Q3,Q5,Q7都是一个车系,但是三者之间的零部件差别却是很大,比如Q3的发动机是国产的,Q7是原装进口的,Q3的轮胎是普通轮胎,Q7是越野轮胎。所以工厂造一辆车,要分别造发动机,轮胎,制动系统组成。
结构
代码实现
有类图了,略
应用例子2 Android中的MediaPlayerFactory
优点
- 分离接口和实现,客户端使用抽象工厂来创建需要的对象,而客户端根本不知道具体的实现是谁,客户端只是面向产品的接口编程而已。
缺点
- 使类文件爆炸
- 不太容易扩展新的产品类,每当我们想要增加一个产品类就需要修改抽象工厂,那么所有的具体工厂都要修改。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android USB转串口通信
一、引用 1、Git上最火的USB转串口通信 2、Android之USB转串口通信 3、安卓开发中的USB转串口通讯 二、截图 废话不多说,先上图,micro usb -> usb 连接的测试温度的外设(其实是个测试粮油品质的,还有TPM值等等) usb_connect.png 三、流程 1、mainfest中注册监听USB拔插动作并且过滤对应vid,pid的设备。这个是静态的,在下面实例中用的是动态的,具体可以参考引用中的第【2】个。 2、查找所有的USB设备 3、动态注册需要用的USB设备权限 4、连接已注册的USB设备,并设置连接参数 5、设置返回监听,并对话 6、按照不同的协议解析byte[]数据获得对应数据(在此不表) 7、关闭连接等 四、代码 0、配置:git上的案例,把其中usbSerialForAndroid的这个module拿下来,关联到自己的工程上面去 build.gradle-app dependencies { compile project(':usbSerialForAndroid') } settings.gradle include ':app',...
- 下一篇
Android Studio 遇到的坑error while launching activity
Android studio 3.1.4运行 app 第一次能成功,后面突然运行不了,手机型号华为 mate10,解决方法 启动terminal 输入 adb uninstall 包名
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8