面向对象设计之设计模式(行为型篇)

面向对象设计之设计模式(行为型篇)

从大量实际行动中概括出来,作为行为的理论抽象、基本框架和标准

该类模式主要用于对象之间的职责及其提供服务的分配,它不仅描述对象或类的模式,还描述他们之间的通信模式

在这里插入图片描述

责任链模式(Chain of Responsibility)

当你想让一个以上的对象都有机会处理请求的时候

在这里插入图片描述

优点

  • 降低耦合度
  • 增加想对象指定责任的灵活性

使用场景

  • 多个对象可以处理一个请求,而其处理器确实未知的
  • 可以动态指定能够处理请求的对象集

命令模式(Command)

在对象中封装请求,保存命令并传递给方法以及像任何其他对象一样返回该命令

在这里插入图片描述

优点

  • 增加新命令不用修改已有类
  • 将操作对象与指导如何完成操作的对象相分离

适用场景

  • 想要通过要执行的动作来参数化对象
  • 在不同的时间指定、排序以及执行请求

解释器模式(Interpreter)

解释定义其语法表示的语言

在这里插入图片描述

优点

  • 容易修改并扩展语法
  • 容易实现语法

适用场景

  • 语言的语法比较简单
  • 效率并不是最主要的问题

迭代器模式(Iterator)

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

在这里插入图片描述

优点

  • 支持集合的不同遍历
  • 简化集合接口

适用场景

  • 在不开放集合对象内部表示的前提下,访问集合对象内容
  • 支持集合对象的多重遍历
  • 为便利集合中的不同结构提供了统一的接口

备忘录模式(Memento)

保持对象状态的“快照”,在不想外界公开其内容的情况下返回到它的最初状态

在这里插入图片描述

优点

  • 保持封装完整
  • 简化了返回到初始状态所需的操作

适用场景

  • 必须保存对象的快找
  • 适用直接接口来获得状态可能会公开对象的实现细节,从而破坏对象的封装性

观察者模式(Observer)

为组件向相关接收方广播消息提供了灵活的方法

在这里插入图片描述

优点

  • 抽象了主体与 Oberserver 之间的耦合关系
  • 支持广播方式的通信

适用场景

  • 对一个对象修改涉及其他对象的修改,而不知道有多少对象需进行修改

状态模式(State)

允许对象在内部状态变化时变更其行为,并且修改其类

在这里插入图片描述

优点

  • 定位指定状态的行为,并根据不同状态来划分行为

适用场景

  • 对象行为依赖于其状态,且对象必须在运行时根据其状态修改行为
  • 操作具有大量以及多部分组成的取决于对象状态的条件语句

策略模式(Strategy)

定义算法族,分别封装起来,让它们之间互相替换,此模式让算法的变化独立于使用算法的客户

在这里插入图片描述

优点

  • 在类自身中定义行为,减少条件语句
  • 更容易扩展模型

适用场景

  • 许多相关类只是在行为方面有所区别
  • 需要算法的不同变体
  • 算法使用客户端未知的数据

模板方法模式(Template Method)

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤

对模板方法进行挂钩 – 钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在,可以让子类有能力对算法的不同点进行挂钩

在这里插入图片描述

优点

  • 容易将可变算法的替换

适用场景

  • 想要一次实现算法的不变部分,适用子类实现算法的可变行为
  • 子类间通用行为需要分解,定位到通用类,可以避免代码重复问题

访问者模式(Visitor)

当你想为一个对象的组合增加新的功能,且封装并不重要时,就使用访问者模式

在这里插入图片描述

优点

  • 容易添加新操作
  • 集中相关操作并且排除不相关操作

适用场景

  • 定义对象结构的类很少被修改,但想要在此结构上定义新的操作
  • 对象结构包含许多具有不同接口的对象类,并且想要对这些依赖于具体类的对象进行操作

中介者模式(Mediater)

通过引入一个能够管理对象间消息分布的对象,简化了系统中对象的通信

在这里插入图片描述

优点

  • 去除对象间的影响
  • 简化对象间的协议
  • 集中化了控制

适用场景

  • 对象集合需要以一个定义规范但复杂的方式进行通信
  • 想要在不使用子类的情况下自定义分布在几个对象之间的行为
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GettingReal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值