问题标签 [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.
c# - 参数化抽象工厂/工厂方法/其他创建模式
我想要一些工厂(不管是抽象工厂模式还是工厂方法——看起来第二个是第一个的特定形式。在我的情况下,应该只创建一个对象)。问题是,尽管创造的产品是相似的,但它们取决于一些论据。
如何按照设计模式准备这个架构?
下面的当前方法
编辑
我看不清楚,所以会重复。
通常我不会因为使用模式而使用模式。但这个问题似乎不是边界情况。看起来相当频繁。更进一步,我相信有适合于此的设计模式,但我不确定是哪一个。现在看起来抽象工厂不是正确的选择。
c# - 创作模式建议
我正在努力寻找一种处理看似不错的问题的好方法。
我的整个模型依赖于定价策略的概念。这些策略根据规则计算特定价格。规则只是如何计算给定时间范围内的价格(早上 8 点到 12 点花了你这么多钱......)
我目前有 6 个策略,每个策略都继承自 RuledBasedPricingStrategy,后者本身实现了 IStrategy
IRule 是一个简单的接口。规则接受定价作为参数,并将根据需要添加尽可能多的定价步骤:
定价是一个简单的类,如下所示:
等等 (...)
我正在寻找一种实例化所有这些策略的好方法。正如您所注意到的,它们将预订、资源和客户端对象作为 ctor 参数。我最初的观点是避免两次传递这些参数(IsEligible 和 Build)。但是,我需要建立一个“工厂”,它会知道所有策略类型并在每次收到新请求时实例化它们:
这似乎不是正确的方法。策略应该被实例化一次,然后重新用于计算策略。但是我不能在那种情况下我最终会做类似的事情
我可以使用哪些模式来简化/清理此代码?
谢谢 Seb
eiffel - Eiffel:创建过程的最佳实践
动物
猪
在我对最佳实践的看法中,我会说
- 如果没有特别意义的创建过程(如我的
make_malformed
示例),请重新定义default_create
- 所有创建过程都应调用
default_create
并添加特定行为(如我的make_from_db
示例) - 那么埃菲尔的许多图书馆的目的是什么?
make
create {LINKED_LIST}.make
如我错了请纠正我。提前致谢!
java - 如何避免用户代码需要了解和实例化策略模式中的具体策略
Strategy pattern
解耦上下文代码和它使用的策略(或算法或策略)。它有一个优势,Template Pattern
因为它可以实现动态行为更改并使用带有委托的组合来实现它。下面是这样的例子。
现在使用上述代码的代码
上面我们看到用户代码必须知道并向上下文提供具体的策略。我们可以像使用创建模式一样Factory method pattern
,但在这种情况下,用户代码必须知道具体的工厂类。这需要用户代码实例化并了解此类具体实现的存在。
为了防止这种情况,一个简单的解决方案可以是使用静态方法将输入作为字符串或枚举,并使用“switch-case”或多个“if-else”语句来决定要实例化哪个类并将实现提供给用户代码。但这又违反了“OCP”,因为在添加新类型的情况下将需要修改代码。
如何在简单的应用程序中遵循原则(我不确定 Spring 和其他框架是否可以解决此类问题的某些配置)。
在简单的应用程序中解决此问题的任何提示或关键点都会有所帮助。
java - 如何避免工厂类中的“级联 if\case”语句
我必须根据特定情况创建一个对象。我读到,解决方案可能是工厂模式,但就我而言,它有很多缺点。
例如:我有一个管理动物的应用程序。在某个时候,客户给了我必须创建的动物列表。使用工厂模式的解决方案应该是:
在我看来,这是一种代码味道。问题是我必须写一个案例陈述来检查客户想要什么类型的动物。此外,如果将来我想创建一个新对象“Tiger”,我必须更改所有工厂类。
我的问题是:有没有办法避免这种情况?是否有一种模式可以让我基于另一个参数创建一个对象,而无需像这样的“级联 if\case-of”?
我在想,使用命令模式,但最后我仍然有这种情况。
c# - 如何在不显式调用派生的情况下创建基于派生类的 ctor 参数的对象
我已将我的真正问题简化为以下示例:
假设我有一个父类Car派生出三个类:Private、Truck和Bus。
派生类的构造函数接收一个类Driver的参数。
类 Driver 包含属性License等属性。
假设每个司机只能拥有三种类型汽车(私人、卡车、公共汽车)之一的驾照。
我想创建一个函数,它将根据提供给函数的驱动程序返回一个派生类的对象。
我希望此函数的用户接收一个对象,他可以在该对象上为每个派生类调用特定函数,例如bus1.OpenBackDoor()
or truck1.AttachWagon()
。
在保持示例代码的一般结构的同时,最好的方法是什么( Create 方法的调用方式可能不同)?