基础学习-设计模式-行为型

责任链模式

通过前一对象记住下一个对象的引用,当有请求发生,请求将沿着这条链传递,直到有对象来处理

只需要将请求发送到责任链即可,请求会自行传递,降低对象之间的耦合

例子:三国杀中的无懈可击,循环询问是否有人使用,左轮手枪轮盘赌

优点:降低发送者与接收者的耦合,简化对象

缺点:不能保证请求一定被接收,不容易观察运行时的特征,可能会造成循环调用

命令模式

将方法的请求与实现解耦,

例子:遥控器和电视,遥控器就是命令发送者,通过具体按钮,来控制电视,电视接收到命令并执行

优点:降低系统耦合度,新命令容易添加到系统

缺点:可能会导致有过多的具体命令类

解释器模式

在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。

例子:一些重复出现的问题可以用一种简单的语言来进行表达

优点:可拓展性好,易于实现简单的文法

缺点:使用场景较少,复杂文法难维护,会引起类的膨胀,采用递归调用方法

迭代器模式

提供一种方法顺序访问一个聚合对象中的各个元素,无须暴露该对象的内部表示

例子:遍历list

优点:支持不同方式遍历一个对象,简化了聚合类,在同一个聚合可以有多个遍历,增加新的的聚合和迭代器类都很方便

缺点:增加新的聚合类需要对应增加新的迭代器,类数成对增加

中介者模式

降低多个对象和类之间的通信复杂性,封装一系列的对象交互,不需要显示相互引用,使其耦合松散,可以独立改变交互

例子:机场调度系统,mvc框架,C控制器就是M模型和V视图的中介者

优点:降低了类的复杂度,将一对多转化为一对一,各类之间的解耦,符合迪米特原则

缺点:中介者会庞大,维护困难

备忘录模式

在不破坏封装的前提下,保存一个对象的某个状态,可以在以后将对象恢复到保存的状态。

例子:后悔药,玩游戏时候存档

优点:提供了后悔的机会,可以很方便的回到某个状态

缺点:消耗资源,如果类的成员变量过多,会占用较大的资源

观察者模式

当一个对象被修改时,自动通知依赖他的对象,并被自动更新

例子:拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者

优点:观察者和被观察者是抽象的耦合,建立一套触发机制

缺点:如果一个对象有很多直接或间接观察者,通知所有的观察者会花很多时间,如果观察者和观察目标有依赖的话可能导致系统崩溃,没有相应的机制知道被观察者是如何变化的只知道发生了变化

状态模式

类的行为基于状态改变,对象的行为依赖于它的状态,根据它的状态改变而改变它的行为

例子:打篮球时候运动员可以有正常状态,不正常状态,超常状态

优点:封装了转换规则,枚举可能的状态,可以多个环境对象共享一个状态对象,

缺点:增加系统类和对象的个数,状态模式结构与实现复杂,容易使程序结构和代码混乱,对开闭原则支持不好

空对象模式

主要为了解决空指针异常,使用在需要检查空值的地方

策略模式

一个类或算法可以在运行时更改,定义一系列算法,把他们封装起来,并使他们可以相互替换,解决多种算法时候的if_else

例子:旅行时的出游方式,选择骑自行车,坐汽车,每种方式都是一个策略

优点:算法可以自由切换,避免使用多重条件判断,拓展性良好

缺点:策略类会增多,所有策略类都需要对外暴露

模板模式

一个抽象类公开定义了执行它的方法的方式,它的子类可以按需重写方法实现,调用将以抽象类中定义的方式进行

例子:造房子,地基,框架都是一样的,后期的装修是不同的,西游记中定好的81难

优点:封装不变部分,拓展可变部分,便于维护,行为由父类控制,子类实现

缺点:不同的实现都需要一个子类实现,导致类的个数增加

访问者模式

将数据结构与数据操作分离,对一个对象结构进行很多不同的操作

例子:到朋友家做客,朋友接收访问,通过朋友的描述,对朋友的描述做一个判断

优点:符合单一原则,优秀的拓展性,灵活性

缺点:对访问者公布具体细节,违反迪米特原则,具体元素变更困难,违反了依赖倒置原则,依赖的具体类,没有依赖对象

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值