2012-01-20 210 views
-1

我正在处理一个并行继承层次结构,我对一步一步重构有一个想法,并希望看到它是否可行,或者是否有更好的方法来实现它。并行继承层次结构重构

  1. 创建实现所需的如CarHandler儿童vwHandlerfordHandler具体行为的孩子Handler类,bmwHandler

  2. 添加调用所有组件和重组它让孩子返回的对象neccessary 。例如呼叫vwHandler.getDrive将返回vwDrive.drive结果,称vwHandler.getSeat回报vwSeat.seat

  3. 重构的其他类,让他们提供一般的功能,而不是具体的如呼叫vwHandler.getDrive将返回处理器

    drive(vwSpec1, vwSpec2)

public abstract class CarHandler 
{ 
    private Car car; 

    public Car getCar() 
    { 
     return car; 
    } 
    public Car setCar() 
    { 
     car = car; 
    } 

    public CarHandler(Car car) 
    { 
     this.car = car; 
    } 

    public Car getCar() 
    { 
     return car; 
    } 

    public void setCar(Car car) 
    { 
     this.car = car; 
    } 

    public void updateCar() 
    { 
     Globalizer.updateOnServer(car); 
    } 

    public abstract Drive getNewDrive(); 
    public abstract Seat getNewSeat();  
} 
+0

您能否给我们提供一个例子? – Grooveek

+0

@Grooveek添加了处理程序的例子 – FooBar

+0

甚至在此之前,不同类型的处理程序有不同的行为吗?你确定你不能将它降低到一个标志(一个具有品牌价值的枚举的成员)吗? – Viruzzo

回答

0

实际上,这种方法对我来说工作得非常好,我已经实施了前两个步骤,最终取消了几百行重复以及未来如何进一步重构。我会强烈推荐这种方法。

0

我真的不明白你的问题,我没有看到你的榜样的关系并行的继承层次,但我不喜欢受欢迎的受保护的现场车。

有关更多信息,请参阅我的回答here。接受的答案是如何在基类中封装行为的一个很好的例子。

+0

是的,我知道这是不好的形式,我会将它转换为正常的存取器和增变器,谢谢抬起头来。 – FooBar

+0

这应该是一个评论而不是答案。如果您有多个对象,如vwDrive,vwSeat,vwEtc,这表示并行层次结构可以在多个位置实现对象特定的行为,理想情况下,这些行为应该集中到一个特定的类以及中央特定类可以用不同的参数调用的其他常规工具集。 – FooBar

+0

vwSeat和bmwSeat是否需要具有不同的行为,即不同的类型?或者他们可能只有不同的字段值?顺便说一句。我没有足够的声望留下评论。 – DanT