问题标签 [creation-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
985 浏览

c# - 参数化抽象工厂/工厂方法/其他创建模式

我想要一些工厂(不管是抽象工厂模式还是工厂方法——看起来第二个是第一个的特定形式。在我的情况下,应该只创建一个对象)。问题是,尽管创造的产品是相似的,但它们取决于一些论据。

如何按照设计模式准备这个架构?

下面的当前方法

编辑

我看不清楚,所以会重复。

通常我不会因为使用模式而使用模式。但这个问题似乎不是边界情况。看起来相当频繁。更进一步,我相信有适合于此的设计模式,但我不确定是哪一个。现在看起来抽象工厂不是正确的选择。

0 投票
1 回答
85 浏览

c# - 创作模式建议

我正在努力寻找一种处理看似不错的问题的好方法。

我的整个模型依赖于定价策略的概念。这些策略根据规则计算特定价格。规则只是如何计算给定时间范围内的价格(早上 8 点到 12 点花了你这么多钱......)

我目前有 6 个策略,每个策略都继承自 RuledBasedPricingStrategy,后者本身实现了 IStrategy

IRule 是一个简单的接口。规则接受定价作为参数,并将根据需要添加尽可能多的定价步骤:

定价是一个简单的类,如下所示:

等等 (...)

我正在寻找一种实例化所有这些策略的好方法。正如您所注意到的,它们将预订、资源和客户端对象作为 ctor 参数。我最初的观点是避免两次传递这些参数(IsEligible 和 Build)。但是,我需要建立一个“工厂”,它会知道所有策略类型并在每次收到新请求时实例化它们:

这似乎不是正确的方法。策略应该被实例化一次,然后重新用于计算策略。但是我不能在那种情况下我最终会做类似的事情

我可以使用哪些模式来简化/清理此代码?

谢谢 Seb

0 投票
1 回答
44 浏览

eiffel - Eiffel:创建过程的最佳实践

动物

在我对最佳实践的看法中,我会说

  • 如果没有特别意义的创建过程(如我的make_malformed示例),请重新定义default_create
  • 所有创建过程都应调用default_create并添加特定行为(如我的make_from_db示例)
  • 那么埃菲尔的许多图书馆的目的是什么makecreate {LINKED_LIST}.make

如我错了请纠正我。提前致谢!

0 投票
1 回答
70 浏览

java - 如何避免用户代码需要了解和实例化策略模式中的具体策略

Strategy pattern解耦上下文代码和它使用的策略(或算法或策略)。它有一个优势,Template Pattern因为它可以实现动态行为更改并使用带有委托的组合来实现它。下面是这样的例子。

现在使用上述代码的代码

上面我们看到用户代码必须知道并向上下文提供具体的策略。我们可以像使用创建模式一样Factory method pattern,但在这种情况下,用户代码必须知道具体的工厂类。这需要用户代码实例化了解此类具体实现的存在。

为了防止这种情况,一个简单的解决方案可以是使用静态方法将输入作为字符串或枚举,并使用“switch-case”或多个“if-else”语句来决定要实例化哪个类并将实现提供给用户代码。但这又违反了“OCP”,因为在添加新类型的情况下将需要修改代码。

如何在简单的应用程序中遵循原则(我不确定 Spring 和其他框架是否可以解决此类问题的某些配置)。

在简单的应用程序中解决此问题的任何提示或关键点都会有所帮助。

0 投票
1 回答
120 浏览

java - 如何避免工厂类中的“级联 if\case”语句

我必须根据特定情况创建一个对象。我读到,解决方案可能是工厂模式,但就我而言,它有很多缺点。

例如:我有一个管理动物的应用程序。在某个时候,客户给了我必须创建的动物列表。使用工厂模式的解决方案应该是:

在我看来,这是一种代码味道。问题是我必须写一个案例陈述来检查客户想要什么类型的动物。此外,如果将来我想创建一个新对象“Tiger”,我必须更改所有工厂类。

我的问题是:有没有办法避免这种情况?是否有一种模式可以让我基于另一个参数创建一个对象,而无需像这样的“级联 if\case-of”?

我在想,使用命令模式,但最后我仍然有这种情况。

0 投票
0 回答
41 浏览

c# - 如何在不显式调用派生的情况下创建基于派生类的 ctor 参数的对象

我已将我的真正问题简化为以下示例:

假设我有一个父类Car派生出三个类:PrivateTruckBus

派生类的构造函数接收一个类Driver的参数。

类 Driver 包含属性License等属性。

假设每个司机只能拥有三种类型汽车(私人、卡车、公共汽车)之一的驾照。

我想创建一个函数,它将根据提供给函数的驱动程序返回一个派生类的对象。

我希望此函数的用户接收一个对象,他可以在该对象上为每个派生类调用特定函数,例如bus1.OpenBackDoor()or truck1.AttachWagon()

在保持示例代码的一般结构的同时,最好的方法是什么( Create 方法的调用方式可能不同)?