应用程序:
1个适用的工厂模型场合
创建新对象的最简单方法是使用新的关键字和特定类别。仅在某些情况下,创建和维护工厂带来的附加复杂性是值得的。本节总结了这些场合。
1.1动态实现
如果您需要创建一些以不同方式(例如上一个自行车的示例)实现相同接口的对象,那么您可以使用出厂方法或简单的工厂对象来简化选择过程。可以清楚地执行或隐含此选择例如,前者可以选择所需的自行车型号;下一部分中提到的XHR工厂的示例属于后者。在这些情况下,您通常必须处理一系列可以用相同接口同样处理的接口。这是为什么这是为什么工厂模式在JavaScript中使用。
1.2保存设置开销
如果对象需要复杂且相互关联,则使用出厂模式可以减少每个对象所需的代码量。如果此设置仅在特定类型的所有实例中只能执行一次,那么此角色是在类的构造函数中输入此设置代码并不是一种有效的方法。这是因为即使设置工作已经完成,这些代码在创建新示例时也将执行,这将分散设置代码。用于不同的类别。工厂方法非常适合此情况。它可以设置一旦在所有必需的对象之前。不管将要实例化多少个不同的类别,该方法可以集中在一个地方。
如果需要使用的类来加载外部库,则特别有用。Factory方法可以检查这些库并动态加载这些无限库。这些设置代码仅存在于一个地方,因此将来更改更加方便。
1.3使用许多小物体形成一个大物体
工厂方法可用于创建一个封装许多较小对象的对象。考虑自行车对象的构造函数。自行车包含许多较小的子系统:车轮,框架,变速箱组件和闸门。如果您不希望在之间强大的耦合一个子系统和较大的对象,但是如果您想在运行时从许多子系统中进行选择,那么工厂方法是理想的选择。使用这项技术,有一天,您可以为所有出售的自行车配备带有特定链条的自行车。如果第二天找到另一个更常见的链,您可以使用此新品种。它很容易实现此更改,因为这些自行车的构造函数不取决于特定的链品种。演示该区域中出厂模式的目的。
工厂模型主要提供创建对象的接口。根据“ Java和Model”,将工厂模式分为三个类别:
这三个模型从上到下逐渐抽象,并且更加笼统。也有一种分类方法,这是一种特殊情况,将简单的工厂模型视为工厂方法模型。以下是使用工厂模型的两种情况:
1.编码时需要创建哪种示例。
2.系统不应依靠如何创建,组合和表达产品实例
2简单的工厂模式
顾名思义,此模型本身非常简单,并且在业务相对简单的情况下使用。
它由三个字符组成(请参见下面的类图):
1.工厂角色:这是该模型的核心,包含某些业务逻辑和判断逻辑。它通常由Java中的特定类实施。
2.抽象产品角色:通常是母类或特定产品继承的接口。它由Java中的接口或抽象类实现。
3.特定产品角色:工厂类别创建的对象是此角色的示例。它由Java中的特定类实现。
那么如何使用简单的工厂模型?让我举一个例子。我认为这比大段落中的理论描述更容易理解!这是爆发的方法:P:p:p:p
使用简单的工厂型号之后,现在的贵族现在只需要坐在汽车中对驾驶员说:“驱动器”。LET查看如何实现:
如果将所有类都放在一个文件中,请不要忘记,只有一个班级被声明为公开。程序中的类之间的关系如下:
这是一个简单的工厂模型。以下是其好处:
首先,在使用简单的工厂模型之后,我们的过程并不是“病态”,这与实际情况更一致。并且客户避免了直接创建产品对象的责任,但仅对“消费者”产品负责(就像爆发家庭一样。
在下面,我们从开放和关闭原则中分析了简单的工厂模型。爆发家庭添加汽车,只要由抽象产品制定的合同,只要工厂类别知道,客户就可以由客户使用。对于产品部分而言,它符合开放和关闭的原则,并开放,修改和关闭;以及判断逻辑,这自然是违反开放和关闭原则的。
对于这样的工厂课程(在我们的示例中是驾驶员大师),我们称其为全能或上帝的班级。
我们给出的示例是最简单的情况,在实际应用中,该产品可能是多层树结构。因为简单的工厂模型中只有一个工厂类别可以与这些产品相对应,这可能会破坏我们的上帝班,然后用尽我们可爱的程序员:
正如我前面提到的,简单的工厂模型适合简单业务。对于复杂的商业环境,可能无法调整。
3.工厂方法模式
让我们首先看一下其构图:
1.抽象的工厂角色:这是工厂方法模式的核心,它与应用程序无关。它是必须由特定工厂或必须继承的父类实现的接口。它是由摘要实现的Java中的类或接口。
2.特定的工厂角色:它包含与特定业务逻辑相关的代码。该应用程序被调用以创建相应的特定产品对象。它由Java中的特定类实现。
3.抽象产品角色:它是特定产品继承的父类或接口。通常,Java中的抽象类或接口要实现。
4.特定的产品角色:特定工厂创建的对象是此角色的一个实例。由Java中的特定类别实现。
让我们使用班级图清楚地表示它们之间的关系:
我们仍然使用一个完整的示例来查看工厂模型的角色是如何协调的。据说,Upstart的业务越来越大,并且越来越多的汽车喜欢。这是驾驶员的主人,必须是记得,维护,他必须被他使用!所以局外人同情他,并说:看到你已经和我在一起已经很多年了,您将来不需要如此努力。我会分配几个人,您只是在乎他们!结果,出现了出厂方法模型的管理。代码显示如下:
工厂方法使用抽象的工厂角色作为核心,以替代简单工厂模型中特定类的使用。工厂方法模式。生成新产品(即,即列高的汽车),只要抽象产品角色提供的合同和抽象工厂的角色,客户就可以使用它,而无需修改任何现有的代码。似乎出厂方法模式完全符合打开和关闭的原则!
使用工厂方法模式足以应付我们可能遇到的大多数业务需求。但是,当产品有多种类型的产品时,将有很多与之相对应的工厂类别,这不应该是我们想要的因此,我建议在这种情况下,简单的工厂模型和工厂方法模型的组合减少了工厂类别:即产品上类似类型的类型(通常是树叶中的兄弟)treeAccomplish。
当然,特殊情况得到了特殊的处理:对于系统中的不同产品树,并且产品家族中存在产品树,然后在这种情况下,可以使用抽象的工厂模型。
4.摘要
让我们看一下简单工厂模型和工厂方法模式的启蒙:
原始:https://juejin.cn/post/71027404633332900901如果您不使用工厂模式来实现我们的示例,则可能会减少代码,以实现现有的汽车,而不是多态性的。,可伸缩性非常差(您可以想象添加汽车后要触摸的课程)。因此,为了提高可伸缩性和维护,值得编写更多代码。
5.抽象工厂模式
首先让我们了解产品家族是什么:一个位于不同产品级别结构中的家庭。如果您可以清楚地理解这个概念,如果您看这句话,我必须欣赏您。
该图中的BMWCAR和BENZCAR是两个产品树(产品层次结构);如图所示,Benzssportscar和BMWSportScar是一个产品家族。它们都可以放入跑车家族中,因此功能是相关的。同样的也是产品系列。
回到抽象产品模型的主题,可以说它与工厂方法模式之间的差异在于创建对象的需要的复杂性。抽象的出厂模式是为客户提供一个可以在多个产品城市创建产品对象的接口,并使用抽象的出厂模式满足条件:
1.系统中有多个产品,系统只能一次消耗其中一种产品
2.它被属于同一产品家族的产品使用。
让我们看一下抽象出厂模式的字符(与工厂方法完全相同):
摘要工厂角色:这是工厂方法模型的核心,该模型与应用程序无关。它是必须由特定工厂或必须继承的父类实现的接口。它是由摘要类或Java的接口。
特定的工厂角色:它包含与特定业务逻辑相关的代码。该应用程序被调用以创建相应的特定产品对象。它由Java中的特定类实现。
抽象产品角色:它是特定产品继承的父类或接口。通常,Java中的抽象类或接口可以实现。
特定的产品角色:特定工厂字符创建的对象是此角色的一个实例。通过Java中的特定类实现。
在观看了前两个模型之后,应计算此模型字符之间的协调状况,因此我不会给出具体的示例。只需注意符合抽象工厂模型的条件,即使有多个产品树木,仍然有产品系列,但不能使用它。