我有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
答案 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)
问题可能是问题的“语言”和编程语言的错位。也就是说,听起来您正在使用面向对象的方法来解决功能问题。
使用功能语言。