用途 (1)、(2)、(3) 的用例是什么。使用它有什么优点和缺点。他们之间有什么区别?
工厂方法模式
这种模式与工厂模式非常相似,客户端也从类层次结构中向工厂请求特定类型的对象,但是工厂模式的 Create 方法工厂类将特定对象的创建委托给派生类并返回客户端请求类型的类的对象。本质上,您拥有一个用于创建类层次结构的多个对象的单一联系点。
您可以将此视为前往机票柜台(控制员)并通过提供您偏好的机票类型(头等舱、商务舱或经济舱)来索取机票。用户不关心如何生成机票,即使在对象表示中,头等舱机票和经济舱机票都是从基本机票类别派生的。
何时使用
- 灵活性很重要(低耦合)
- 对象可以在子类中扩展
- 选择一个子类而不是另一个子类有一个特定的原因——这个逻辑构成了工厂方法的一部分。
- 客户端将职责委托给并行层次结构中的子类。
工厂模式或简单工厂模式
该模式与工厂方法模式非常相似。但与工厂方法模式不同,这种模式要简单一些。 Factory 的 Create 方法本身创建所需类型的实例并返回它,而不是将创建委托给子类。
建造者模式
在构建器模式中,创建对象的复杂任务被封装在类或方法中。例如,考虑在快餐柜台点餐的情况。这顿饭通常包括汉堡、薯条和饮料。餐食中的每道菜都有其自己的制作过程。这项任务由顾客点餐的柜台处理,而不是顾客必须处理每件商品的创建过程。下订单后,柜台人员负责创建包含这三种食品的餐食,并将这些食品作为餐食的单个实例返回给顾客。
而另一位顾客可能会要求搭配大薯条和健怡可乐。同样,订单柜台的人员负责构建与第一个订单不同的订单。从顾客的角度来看,总是先下订单,然后到柜台,然后将餐食退回。
何时使用
- 对象的构建不是一个简单的任务
- 子部分组成每个对象
- 客户需要不止一种(其中有不同的子部分)最终对象。这种对不同最终目标的需求可能会发生,即使不是同时发生,至少也会在不同的时间点发生。
更多信息
- 设计模式:抽象工厂与工厂方法 https://stackoverflow.com/questions/4209791/design-patterns-abstract-factory-vs-factory-method
- 关于原型模式的问题 https://stackoverflow.com/questions/5739240/questions-about-the-prototype-pattern/5739479#5739479
- 建造者模式与工厂模式 http://game-engineering.blogspot.in/2009/06/builder-pattern-vs-factory-pattern.html
- 创作模式 http://www.oodesign.com/creational-patterns/
- 创意设计模式 http://gsraj.tripod.com/design/creational.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)