Abstract Factory

或称

工具包

目的

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

解释

真实世界例子

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

通俗的说

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


iluwatarCreationalGang of Four大约 4 分钟
Builder

目的

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

解释

现实世界例子

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

用通俗的话说

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


iluwatarCreationalGang of Four大约 3 分钟
Converter

目的

转换器模式的目的是提供相应类型之间双向转换的通用方法,允许进行干净的实现,而类型之间无需相互了解。此外,Converter模式引入了双向集合映射,从而将样板代码减少到最少。

解释

真实世界例子

在真实的应用中经常有这种情况,数据库层包含需要被转换成业务逻辑层DTO来使用的实体。对于潜在的大量类进行类似的映射,我们需要一种通用的方法来实现这一点。

通俗的说

转换器模式让一个类的实例映射成另一个类的实例变得简单


iluwatarCreationalDecoupling大约 2 分钟
Dependency Injection

目的

依赖注入是一种软件设计模式,其中一个或多个依赖项(或服务)被注入或通过引用传递到一个依赖对象(或客户端)中,并成为客户端状态的一部分。该模式将客户的依赖关系的创建与其自身的行为分开,这使程序设计可以松散耦合,并遵循控制反转和单一职责原则。

解释

真实世界例子

老巫师喜欢不时地装满烟斗抽烟。 但是,他不想只依赖一个烟草品牌,而是希望能够互换使用它们。

通俗的说

依赖注入将客户端依赖的创建与其自身行为分开。


iluwatarCreationalDecoupling大约 2 分钟
Factory

也被称为

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

含义

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

解释

现实例子

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


iluwatarCreationalGang of Four大约 2 分钟
Factory Kit

含义

使用分离的构建器和工厂接口来定义一个不可变内容的工厂。

类图

适用场景

工厂套件模式适用于与以下场景:

  • 一个类无法预知它需要创建的对象的类别
  • 你只是想要一个新的自定义构建器(builder)的实例,而非全局的构建器
  • 你明确地想要定义对象的类型,而且工厂可以创建这些对象
  • 你想要分离构建器(builder)和创建器(creator)接口

引用


iluwatarCreationalExtensibility小于 1 分钟
Factory Method

Also known as

或称

虚拟构造器

目的

为创建一个对象定义一个接口,但是让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类。

解释

真实世界例子

铁匠生产武器。精灵需要精灵武器,而兽人需要兽人武器。根据客户来召唤正确类型的铁匠。

通俗的说

它为类提供了一种把实例化的逻辑委托给子类的方式。

维基百科上说


iluwatarCreationalExtensibilityGang Of Four大约 2 分钟