Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 寻找一种设计模式_Design Patterns_Oop - Fatal编程技术网

Design patterns 寻找一种设计模式

Design patterns 寻找一种设计模式,design-patterns,oop,Design Patterns,Oop,我有80-90门课,都是一种计算。但每个类都使用一种方法 计算每个类中相同的。每个类中不同的项目是 是计算方法中使用的实例变量 我之所以要寻找一个模式,是因为我所做的工作似乎极为重复。下面是一个仅计算一次的示例,但最多可以进行200次计算 Protected Overrides Sub Compute(ByVal cache As Cache.ClientCache(Of System.Guid), _ ByRef objIsTi

我有80-90门课,都是一种计算。但每个类都使用一种方法 计算每个类中相同的。每个类中不同的项目是 是计算方法中使用的实例变量

我之所以要寻找一个模式,是因为我所做的工作似乎极为重复。下面是一个仅计算一次的示例,但最多可以进行200次计算

Protected Overrides Sub Compute(ByVal cache As Cache.ClientCache(Of System.Guid), _
                                 ByRef objIsTickBoxATicked As IClientAnswer(Of System.Guid))
     Dim objClientAdviceParas As ClientAdviceParagraphs

     'Get the Client Advice Paragraphs
     objClientAdviceParas = GetTickBoxesFromCache(GetAnonymousCache(cache), _
                                                  CType(cache.Client, Client))
     'Return the value
     objIsTickBoxATicked.BoolValue = _
                CheckTickBox(objClientAdviceParas, m_csClientAdviceParaWelfareBenefitsReferral)

End Sub

您是否考虑过为80-90类创建一个超类?你可以把普通逻辑放在超类中。

我想你应该考虑。

p>我有点困惑。您可以说,在每个类中进行计算的方法是相同的,但是它使用不同的实例变量。这是否意味着该方法始终具有相同的签名,但实现不同?在这种情况下,您所能做的就是将方法和公共成员变量分解成一个超类,但您仍然需要为每个计算编写计算方法的实现。这不会为您节省很多工作,但它允许您以多态方式使用计算。通常,如果每个计算都不同(甚至只是一点点),那么您必须独立地实现它。如果所有计算都有一个通用模式,例如:

1. fetch values
2. apply transform
3. sort result
或者类似的东西。

正如您所描述的,在您的80-90类中,只有“实例变量”是不同的,我建议将它们设置为一个类,并且只设置一个类。实例负责携带不同的实例变量值,而不是类


如果创建实例的代码很复杂,那么可以创建一个工厂类,每个实例都有一个单独的工厂方法:createXXX()。所有这些方法都将返回同一类的一个新实例,并用不同的值初始化。

也许问题在于问题的“语言”和编程语言不一致。也就是说,听起来您正在使用面向对象的方法来解决功能问题


使用函数式语言。

如果你把标题写得更具体一点,会有助于人们找到你的问题。要回答这个问题,我们确实需要更多地了解不同计算之间的差异。你能再描述一下吗,或者至少再增加一次计算来说明这些变化的方式吗?到底是什么?也就是说,实际的问题是什么?我已经研究了模板方法模式,但它仍然意味着我有70-80个不同的类。只有一种方法。函数式编程语言是我刚才考虑过的东西,甚至创建了一个DSL,这样提供计算的分析师就可以自己编写计算了。我对函数式语言有足够的了解,认识到它可以做我想要的事情。实施它将是另一件事,谢谢你把我送到正确的方向。