跳至主要內容
Acyclic Visitor

目的

允许将新功能添加到现有的类层次结构中,而不会影响这些层次结构,也不会有四人帮访客模式中那样循环依赖的问题。

解释

真实世界例子

我们有一个调制解调器类的层次结构。 需要使用基于过滤条件的外部算法(是Unix或DOS兼容的调制解调器)来访问此层次结构中的调制解调器。

通俗地说

非循环访问者允许将功能添加到现有的类层次结构中,而无需修改层次结构

WikiWikiWeb 上说


iluwatar大约 3 分钟BehavioralExtensibility
Bytecode

意图

允许编码行为作为虚拟机的指令。

解释

真实世界例子

一个团队正在开发一款新的巫师对战游戏。巫师的行为需要经过精心的调整和上百次的游玩测试。每次当游戏设计师想改变巫师行为时都让程序员去修改代码这是不妥的,所以巫师行为以数据驱动的虚拟机方式实现。

通俗地说

字节码模式支持由数据而不是代码驱动的行为。

Gameprogrammingpatterns.com 中做了如下阐述:


iluwatar大约 4 分钟BehavioralGame programming
Caching

目的

为了避免昂贵的资源重新获取,方法是在资源使用后不立即释放资源。资源保留其身份,保留在某些快速访问的存储中,并被重新使用,以避免再次获取它们。

类图

Caching

适用性

在以下情况下使用缓存模式

  • 重复获取,初始化和释放同一资源会导致不必要的性能开销。

鸣谢


iluwatar小于 1 分钟BehavioralPerformanceCloud distributed
Chain of responsibility

目的

通过给多个对象一个处理请求的机会,避免请求的发送者和它的接收者耦合。串联接收对象并在链条中传递请求直到一个对象处理它。

解释

真实世界例子

兽王大声命令他的军队。最近响应的是指挥官,然后是军官,然后是士兵。指挥官,军官,士兵这里就形成了一个责任链。

通俗的说

它帮助构建一串对象。请求从一个对象中进入并结束然后进入到一个个对象中直到找到合适的处理器。

维基百科说

在面向对象设计中,责任链模式是一种由源命令对象和一系列处理对象组成的设计模式。每个处理对象包含了其定义的可处理的命令对象类型的逻辑。剩下的会传递给链条中的下一个处理对象。


iluwatar大约 2 分钟BehavioralGang of Four
Circuit Breaker

意图

以这样一种方式处理昂贵的远程服务调用,即单个服务/组件的故障不会导致整个应用程序宕机,我们可以尽快重新连接到服务。

解释

真实世界例子

想象一个 Web 应用程序,它同时具有用于获取数据的本地文件/图像和远程服务。 这些远程服务有时可能健康且响应迅速,或者由于各种原因可能在某 个时间点变得缓慢和无响应。因此,如果其中一个远程服务缓慢或未成功响应,我们的应用程序将尝试使用多个线程/进程从远程服务获取响应,很快它们都会挂起(也称为 [线程饥饿]thread starvation)导致我们的整个 Web 应用程序崩溃。我们应该能够检测到这种情况并向用户显示适当的消息,以便他/她可以探索不受远程服务故障影响的应用程序的其他部分。 同时,其他正常工作的服务应保持正常运行,不受此故障的影响。


iluwatar大约 6 分钟BehavioralPerformanceDecouplingCloud distributed
Command

或称

行动, 事务模式

目的

将请求封装为对象,从而使你可以将具有不同请求的客户端参数化,队列或记录请求,并且支持可撤销操作。

解释

真实世界例子

有一个巫师在地精上施放咒语。咒语在地精上一一执行。第一个咒语使地精缩小,第二个使他不可见。然后巫师将咒语一个个的反转。这里的每一个咒语都是一个可撤销的命令对象。

用通俗的话说

用命令对象的方式存储请求以在将来时可以执行它或撤销它。


iluwatar大约 4 分钟BehavioralGang of Four
Dirty Flag

或称

  • 是否脏 模式

目的

避免昂贵资源的重新获取。资源保留其身份,保留在某些快速访问的存储中,并被重新使用以避免再次获取它们。

类图

Dirty Flag

适用性

在以下情况下使用脏标志模式

  • 重复获取,初始化,释放相同资源所导致不必要的性能开销

鸣谢


iluwatar小于 1 分钟BehavioralGame programmingPerformance
Interpreter

目的

给定一种语言,请定义其语法的表示形式,以及使用该表示形式来解释该语言中的句子的解释器。

类图

Interpreter

适用性

有一种要解释的语言时,请使用解释器模式,并且可以将语言中的语句表示为抽象语法树。解释器模式在以下情况下效果最佳

  • 语法很简单。 对于复杂的语法,语法的类层次结构变得庞大且难以管理。 在这种情况下,解析器生成器之类的工具是更好的选择。 他们可以在不构建抽象语法树的情况下解释表达式,这可以节省空间并可能节省时间
  • 效率不是关键问题。 通常,最有效的解释器不是通过直接解释解析树来实现的,而是先将其转换为另一种形式。 例如,正则表达式通常会转换为状态机。 但是即使这样,翻译器也可以通过解释器模式实现,因此该模式仍然适用。

iluwatar大约 1 分钟BehavioralGang of Four
Iterator

又被称为

游标

目的

提供一种在不暴露其基础表示的情况下顺序访问聚合对象的元素的方法。

解释

真实世界例子

百宝箱包含一组魔法物品。有多种物品,例如戒指,药水和武器。可以使用藏宝箱提供的迭代器按类型浏览商品。

通俗地说

容器可以提供与表示形式无关的迭代器接口,以提供对元素的访问。

维基百科说

在面向对象的编程中,迭代器模式是一种设计模式,其中迭代器用于遍历容器并访问容器的元素。


iluwatar大约 2 分钟BehavioralGang of Four
Observer

Also known as

又被称为

家属,发布订阅模式

目的

定义一种一对多的对象依赖关系这样当一个对象改变状态时,所有依赖它的对象都将自动通知或更新。

解释

真实世界例子

在遥远的土地上生活着霍比特人和兽人的种族。他们都是户外生活的人所以他们密切关注天气的变化。可以说他们不断地关注着天气。

通俗的说

注册成为一个观察者以接收对象状态的改变。


iluwatar大约 3 分钟BehavioralGang Of FourReactive