温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-07-17 02:01:41 来源:网络 阅读:476 作者:星恒Android 栏目:移动开发
访问者模式
一句话

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

细节

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

应用场景

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

中介者模式
一句话

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

应用场景

源码: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策略模式

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI