寻找设计模式

时间:2009-11-11 13:38:38

标签: design-patterns oop

我有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

5 个答案:

答案 0 :(得分:4)

您是否考虑过为80-90课程创建一个超类?您可以将公共逻辑放在超类中。

答案 1 :(得分:2)

我认为你应该考虑Template Method Pattern

答案 2 :(得分:2)

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

1. fetch values
2. apply transform
3. sort result

或类似的东西。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

使用功能语言。