前言
系列文章参考了《大话设计模式》和《Android源码设计模式》两本书
2.结构型
2.1 适配者模式
-
相当于翻译官角色
将一个类的接口转为另一个能够被兼容的接口
-
两个类所做事情相似,但是所需接口不同时使用,但优先考虑接口重构,再用适配器
-
安卓中应用:ListView中的Adapter是最常见的,虽然有些偏离接口不兼容使用适配器的情景,但也是Adapter的一种应用。因为不同ListView数据类型,内容千变万化,通过Adapter和依赖倒转原则,我们只需在最后return view
2.2 桥接模式
- 将抽象部分和实现部分分离
- 铺垫:
优先使用聚合/合成,只有关系是is-a时才用继承
尽可能使关系是聚合,而不是如下
- UML图
- 代码
Implementor
Abstraction
客户端
2.3 代理模式
-
相当于对象分身,为其他对象一种代理以控制对这个对象的访问
-
代码
-
应用:
- 远程代理:一个对象在不同地址空间提供局部代表
- 虚拟代理:对象创建开销大,存放实例化时间长,比如网页中的图片框替代真实图片
- 安全代理:控制真实对象的访问权限
-
安卓中的应用:ActivityManagerService中的ActivityManagerProxy,之间使用Binder实现进程中的Binder通信,属于远程代理
2.4 享元模式
- 概念:
共享技术支持大量细粒度(细节较多)的对象 - UML图
像是‘‘见人说人话’’,将人格中的不同面展现给不一样的人,而享元是将对象中的细节分享给不同的部分,这里的元类似元数据的元 - 代码
2.5 装饰模式
-
作用:
(像是可以随便搭衣服,没有限制)- 动态地给
对象添加额外的职责
(为已有功能动态添加更多功能) - 将核心职责和装饰功能结合
- 动态地给
-
UML图
-
代码
2.6 组合模式
- 整体与部分组合成树形结构,
单个对象和组合对象使用一致
(就像总公司和分公司功能一样时的关系) - UML图
- 代码
2.7 外观模式
- 概念
(像是将基金交给基金经理一样,对外接口便是基金)
为子系统的接口提供一个更高层的接口,使得子系统更容易使用 - UML图
- 代码
- 好处:提供简单接口,减少依赖,复用复杂且重复代码
最后
结构型设计模式包含了
1.桥接:抽象与实现相结合的模式,优先聚合,降低耦合;
2.装饰:动态添加职责,有具体成分类,装饰类和具体装饰类;
3.外观:在子系统接口中提出更高接口,易于应用;
4.适配器:解决接口不适配问题;
5.享元:抽象类和具体FlyWriter类,含有共享和非共享部分;
6.组合:单个和组合对象具有相同的功能;
7.代理:类似对象分身,起到对象跨进程,安全使用等目的。
未完待续,探索在路上~