生成器模式与模板方法之间的差异(生成器与模板)

|| 模板模式在基类中提供算法,可以在派生类中修改其步骤。 在Builder模式中,具体的builder公开了从Director类调用的用于构建产品的方法。 我了解使用这些模式的目的有所不同。模板模式是一种行为模式,它会更改模板中的一个或多个步骤,而构建器模式是创建模式。 除了上述差异外,还有其他差异吗? 构造器模式中的主管不是模板模式中的基础模板。具体的构建者的行为就像模板模式中带有可替换步骤的派生类一样? 有人可以澄清一下。谢谢。 我指的是http://www.dofactory.com/Patterns/Patterns.aspx     
已邀请:
模板方法实际上只是定义每个子类必须定义的某些方法的一种方式。 构建器模式用于构造更复杂的对象。 假设我们要构建不同的Saab(汽车品牌)模型。每种型号都有不同的引擎,灯光等。 如果要使用模板方法模式,则必须为每种单一的汽车组合创建一个类,或使用一些讨厌的继承层次结构。这些方法中的许多也将包含重复的代码。 通过构建模式,我们可以取而代之地采用不同的零件,并将它们组成完整的汽车。因此,如果需要,我们可以为每个模型重用引擎,也可以自定义汽车的每个部分。     
我发现相同的问题非常有趣。 萨博的汽车示例很有趣,但是它并没有遵循“四人帮”(设计模式)中对Builder模式的描述。 我将使用“四人帮”术语。 在“四人帮”中,每次调用ѭ0时都不能混合使用具体的构建器,因此,萨博的示例虽然有趣,但对我来说并不能真正回答问题。 我看到一些: Director对象与构建器层次结构的分离是一个关键区别。在Template Factory中,体现通用流的方法和重写的方法都是同一类的成员。这使得Builder模式在封装过程的内部阶段方面更好,因为如果仅访问Director对象,则客户端代码不太可能与此类方法联系。构建器模式还允许完全独立于构建器层次结构来制定组装过程,从而在需要时可以更灵活地替换构建器实例。例如,一旦有了一个Director实例,就可以轻松构建产品的几种表示形式,每次动态替换具体的构建器。因此,构建器更具动态性,并且更好地封装了混凝土构建器的内部工作原理。 另外,如果要通过继承详细说明Director对象,则可以在不增加层次的情况下进行。例如,您可能有一个明确的构建过程来节省最终构建之前的时间-您可以将Director对象子类化,甚至可以对其本身使用\“ Template Method \”来通过继承对其进行自定义,而无需重新实现具体的构建器。 但这导致我们考虑与\“ Template Factory \”密切相关的另一种模式-“ Strategy \”模式。 策略与模板工厂非常相似,有两个明显的区别:它也将上下文对象与策略层次结构分开,从而允许在运行时为单个问题实例切换算法。另一个不同之处是,这些示例似乎表明,调用策略不一定像“模板方法”中那样涉及复杂或结构化的过程。 但是,我将其带到这里作为与Builder的类比的另一点-如果\“ Strategy \”在其类结构中与Builder并行,则与\“ Template Method \”并行的创建模式应为\“ Factory Method \”。这很明显,不仅在名称上,而且很有趣,这本书的“工厂方法”和“模板方法”两章的讨论都使用几乎相同的示例(用于编辑文档的应用程序)。 因此,在不讨论创造和行为模式之间有什么区别的问题时,我倾向于认为“构建器”和“工厂方法”基本上都是特定情况,并且分别是“策略”和“模板方法”的改进。 因此,问题就变成了-如果您没有看到Builder和Template Factory之间的区别,请尝试回答以下问题: 您希望对系统的特定部分有什么看法?是“行为”还是“创造”?和 一方面,您是否需要强健的封装,或者动态替换,部署或调整构建器实例,还是希望创建过程或模板方法的复杂性(通过继承,合成或其他方式)发展?如果对以上任何问题的回答都与“构建者/策略”结构相对应。否则,请在XX方法模式中使用关系或行为的简单多态性。     
在开始之前,我要回答所有的问题:\“任何语言的任何编程概念都需要以三种方式来理解。(a)从设计角度(b)运行时角度(c)从内存角度。 说过基于(a)给出ppl的ppl可能与(b)不一致,反之亦然(或者可能有人会给出循环解释以污染清晰的定义)。比萨构建器,餐厅构建器,汽车构建器或UI模板,工作流程模板在企业项目中要求您实现构建器/模板模式时可能没有任何意义(可能是这些模式定义起来不够成熟)。失败的原因是,如果我知道必须分4个步骤构建某个对象,那么为什么我要从空开始实例化它,并使用Director一步一步地将其填充。如果我不希望第3步或第2步发生过多异常,将会发生什么情况。相反,当所有4个步骤都完成后,我将创建最终对象(这是我在整个职业生涯中都发生的事情)为什么开发人员不采用构建器模式)。在可能需要异步行为的分布式系统中,ppl可能会提出争论,然后Builder可以提供帮助。但是如果是这种情况,那么我仍将依赖onreadystatechange == 4并实例化我的builderObj。因此,我们不应该使用Builder吗?恕我直言,答案是“否”。 我的理解是在.net中,我们有ControllerBuilder,SqlConnectionStringBuilder,UriBuilder;都在自定义ControllerFactory,Sql,Uri工厂;然后我的主程序可以使用这些工厂来生成Controllers,ConnStrings,Uries。那么Builder模式是用于工厂设置定制的吗?我们需要定制工厂设置吗?可能永远不会;相反,我将要做的最好的事情是创建4个异步方法并将它们与步骤2的参数链接(在第二个链接步骤3的参数上...)。什么是abt模板模式(asp.net工作流模板或jQuery模板或固定模板)。对我而言,两者是相同的,但与builder相比,模板本质上更加严格(几乎所有东西都固定了,很少有属性会更改以定义特定的tmplt),并且一旦定义了模板就可以出厂。我还看到这两个的另一个谣言能够“任何工厂->任何产品”,因为您何时会使用构建器模式? ;但这不是真的bcoz与上面类似  .net ControllerBuilder,sql,uri方案,带有“工厂工厂”概念。这违反了许多设计原则(SRP,LSP,错误的封装)。希望我对这两者的完整撰写对从初学者到高级人士都有帮助。     

要回复问题请先登录注册