OOP:在这种情况下,适当的班级设计应该是什么?

时间:2011-10-21 17:04:57

标签: java oop design-patterns

我有一个来自GUI的对象guiObject。基于其数据字段,我需要实例化适当类的domainObject。它可以是DomainClassADomainClassB

DomainClassA有一个整数构造函数参数intParamA(来自guiObject.fieldA)。

DomainClassB有一个整数构造函数参数intParamB(来自guiObject.fieldB)。

为了解决这个问题,我制作了AbstractFactory,其中包含guiObject中的必填字段,使用DomainClassAFactory中的相应字段实例化DomainClassBFactoryGuiClass并重新调整。反过来,这些工厂中的任何一个create()都已正确实例化domainObject

但现在,根据guiObject.fieldC,我需要在实例化intParamA之前更改intParamBdomainObject(即减1)。为了实现这一点,我必须为每个DomainClass的每个不同类型的“参数更改”创建单独的工厂,然后创建生成正确工厂的单独抽象工厂。这听起来很丑陋,看起来很难看。

正确的设计应该是什么?

2 个答案:

答案 0 :(得分:4)

除非您需要所有这些图层,否则请让工厂询问guiObject并返回正确的类型。

过度分析导致大多数应用程序根本不需要的东西。只有在严格必要时才添加额外的抽象层。他们通常不是。

答案 1 :(得分:1)

我个人将所有这些逻辑放在原始工厂中,而不是试图将其展开:

public DomainObj getDomainObj(GuiObject guiObject) {
    int param = guiObject.someField ? guiObject.intParamA : guiObject.intParamB;
    param = guiObject.fieldC ? param : param - 1;
    return guiObject.someField ? new DomainClassA(param) : new DomainClassB(param);
}