Abstract Factory

或称

工具包

目的

提供一个用于创建相关对象家族的接口,而无需指定其具体类。

解释

真实世界例子

要创建一个王国,我们需要具有共同主题的对象。 精灵王国需要精灵王,精灵城堡和精灵军队,而兽人王国需要兽王,精灵城堡和兽人军队。 王国中的对象之间存在依赖性。

通俗的说

工厂的工厂; 一个将单个但相关/从属的工厂分组在一起而没有指定其具体类别的工厂。


iluwatarCreationalGang of Four大约 4 分钟
Adapter

又被称为

包装器

目的

将一个接口转换成另一个客户所期望的接口。适配器让那些本来因为接口不兼容的类可以合作无间。

解释

现实世界例子

考虑有这么一种情况,在你的存储卡中有一些照片,你想将其传到你的电脑中。为了传送数据,你需要某种能够兼容你电脑接口的适配器以便你的储存卡能连上你的电脑。在这种情况下,读卡器就是一个适配器。 另一个例子就是注明的电源适配器;三脚插头不能插在两脚插座上,需要一个电源适配器来使其能够插在两脚插座上。 还有一个例子就是翻译官,他翻译一个人对另一个人说的话。


iluwatarStructuralGang of Four大约 4 分钟
Bridge

又被称为

手柄/身体模式

目的

将抽象与其实现分离,以便二者可以独立变化。

解释

真实世界例子

考虑一下你拥有一种具有不同附魔的武器,并且应该允许将具有不同附魔的不同武器混合使用。 你会怎么做? 为每个附魔创建每种武器的多个副本,还是只是创建单独的附魔并根据需要为武器设置它? 桥接模式使您可以进行第二次操作。

通俗的说

桥接模式是一个更推荐组合而不是继承的模式。将实现细节从一个层次结构推送到具有单独层次结构的另一个对象。


iluwatarStructuralGang of Four大约 3 分钟
Builder

目的

将复杂对象的构造与其表示分开,以便同一构造过程可以创建不同的表示。

解释

现实世界例子

想象一个角色扮演游戏的角色生成器。最简单的选择是让计算机为你创建角色。但是如果你想选择一些像专业,性别,发色等角色细节时,这个角色生成就变成了一个渐进的过程。当所有选择完成时,该过程也将完成。

用通俗的话说

允许你创建不同口味的对象同时避免构造器污染。当一个对象可能有几种口味,或者一个对象的创建涉及到很多步骤时会很有用。


iluwatarCreationalGang of Four大约 3 分钟
Chain of responsibility

目的

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

解释

真实世界例子

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

通俗的说

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

维基百科说


iluwatarBehavioralGang of Four大约 2 分钟
Command

或称

行动, 事务模式

目的

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

解释

真实世界例子

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

用通俗的话说

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


iluwatarBehavioralGang of Four大约 4 分钟
Composite

目的

将对象组合成树结构以表示部分整体层次结构。 组合可以使客户统一对待单个对象和组合对象。

解释

真实世界例子

每个句子由单词组成,单词又由字符组成。这些对象中的每一个都是可打印的,它们可以在它们之前或之后打印一些内容,例如句子始终以句号结尾,单词始终在其前面有空格。

通俗的说

组合模式使客户能够以统一的方式对待各个对象。

维基百科说

在软件工程中,组合模式是一种分区设计模式。组合模式中,一组对象将像一个对象的单独实例一样被对待。组合的目的是将对象“组成”树状结构,以表示部分整体层次结构。实现组合模式可使客户统一对待单个对象和组合对象。


iluwatarStructuralGang of Four大约 3 分钟
Factory

也被称为

  • 简单工厂
  • 静态工厂方法

含义

在工厂类中提供一个封装的静态工厂方法,用于隐藏对象初始化细节,使客户端代码可以专注于使用,而不用关心类的初始化过程。

解释

现实例子

假设我们有一个需要连接到 SQL Server 的 Web 应用,但现在我们需要切换到连接 Oracle。为了不修改现有代码的情况下做到这一点,我们需要实现简单工厂模式。在这种模式下,可以通过调用一个静态方法来创建与给定数据库的连接。


iluwatarCreationalGang of Four大约 2 分钟
Interpreter

目的

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

类图

适用性

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

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

iluwatarBehavioralGang of Four大约 1 分钟
Iterator

又被称为

游标

目的

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

解释

真实世界例子

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

通俗地说

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

维基百科说

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


iluwatarBehavioralGang of Four大约 2 分钟
2