设计模式一句话与实战应用总结

访问者模式
一句话

实现了访问者和被访问者分离,灵活且扩展性强;但违背了迪米特和依赖倒转原则,被访问元素若修改影响较大。

创新互联为企业级客户提高一站式互联网+设计服务,主要包括成都网站制作、网站设计、外贸网站建设重庆APP开发、微信小程序、宣传片制作、LOGO设计等,帮助客户快速提升营销能力和企业形象,创新互联各部门都有经验丰富的经验,可以确保每一个作品的质量和创作周期,同时每年都有很多新员工加入,为我们带来大量新的创意。 

细节

双分派技术(双动态绑定)
访问者的角色由它的实现对象确定
被访问的角色也由它的具体对象决定

应用场景

源码:注解的解释器
员工给不同管理者查看的报表
病人、抓药人、医生、定价者面对药店不同药物所做的想法或操作

中介者模式
一句话

加入中介类来改变对象关系,使网状结构变为星型结构,多对多变为一对多。应用于对象关系较为复杂的情况。

应用场景

源码:binder driver和service manager;keyGuardViewMediator;
主板和电源、cpu等关系
总经理和诸多部门
Activity中view、model、逻辑交互

外观模式
一句话

和中介者类似,加入中间类形成统一编程接口,区别在于不是为了改变对象关系,而是把多个功能封装为api以供调用。

应用场景

源码:Context
插件化动态加载(ActivityProxy)
sdk封装
框架封装(OKHttp,Piccaso)

组合模式
一句话

通过多层继承和实现相同方法组合模型,用于控制树形结构。但通常需要进行类型判断,增加代码复杂度。

细节

安全的组合模式:由子组合完成抽象方法(ViewGroup),外界使用需要判断view或viewGroup,使用不方便。
透明组合模式:根节点、枝干节点、叶节点都有相同的抽象方法,对外界透明,使用方便不安全。

应用场景

源码:ViewGroup View
文件夹和文件

适配器模式
一句话

通过适配接口进行兼容处理,通常后期使用,避免过度适配;灵活使用可以增加扩展和复用性(系统adapter)。

细节

对象适配器:适配目标为接口,适配器中传入被适配对象,通过适配目标接口进行转换处理。
类适配器:适配目标为抽象父类,通过扩展子类实现相同方法实现方法兼容。

应用场景

源码:adapter
电源转换

装饰者模式
一句话

利用装饰者类重复传入装饰对象,可以随意增减装饰方法。替代继承方式解决类膨胀问题,扩展性极强。

应用场景

源码:ContextWrapper
餐馆混搭
奶茶混搭

状态模式
一句话

抽象状态对象使得行为在不同状态下都能产生变化。

应用场景

源码:wifi管理
登录状态
家电控制状态
下载状态管理

模板模式
一句话

定义算法框架,使子类不改变结构的情况下改变行为。

应用场景

源码:AsynTask、Activity生命周期
adapter-holder
draw流程
Activity Init三板斧

备忘录模式
一句话

在该对象之外保存该对象的内部状态

应用场景

源码:saveInstanceState,事务回滚
游戏保存读取
记事本状态恢复

享元模式
一句话

使用共享对象(对象池)实现对象的复用,需要分离内部状态和外部状态,可以大大节约内存。

应用场景

源码:handleMessage消息池复用;线程池
建立tcp消息池
车票系统车次信息池

命令模式
一句话

封装命令对象传递请求给调用者,分离请求者和接收者,会增加大量的类,但是职责分明,高内聚,非常灵活容易扩展,可作为回调的替代。

应用场景

源码:Packagemanager的安装、移动、测量命令(内部类HandlerParams子类实现);
画笔应用
记事本应用

解释模式
一句话

使用不同解释器对特定语言进行解析,对简单语法适应较好,易于扩展,无法对应复杂文法(如有顺序的四则运算)。

应用场景

源码:清单文件解析parseActivity
简单计算

责任链模式
一句话

发送请求给一个对象链条,该链条每个对象和它的下一对象绑定,实现发起者与最终接手者的解耦

应用场景

源码:事件分发
广播的有序机制改进为责任链广播
公司各种权限的逐级申请
继承制度

设计模式异同对比

装饰者VS代理模式

装饰模式用作功能扩展,可以给相同对象不断增加新的特征;代理模式则偏向行为控制,在方法执行前后做处理。

状态模式vs策略模式

策略模式封装可变更的算法解耦;状态模式通过改变状态控制行为。


名称栏目:设计模式一句话与实战应用总结
文章来源:http://scyanting.com/article/iescsj.html