Java 并行继承层次重构

Java 并行继承层次重构,java,refactoring,Java,Refactoring,我正在处理一个并行继承层次结构,我有一个逐步重构的想法,我想知道它是否会工作,或者是否有更好的方法来做 创建一个具有实现所需特定行为的子级的处理程序类,例如具有子级的CarHandler,fordHandler,bmwHandler 添加对所有组件的调用并对其进行重新构造,以便子组件返回必要的对象。e、 g.调用vwdhandler.getDrive将返回vwDrive.drive的结果,调用vwdhandler.getSeat将返回vwSeat.seat) 重构其他类,使其提供一般功能而不是特

我正在处理一个并行继承层次结构,我有一个逐步重构的想法,我想知道它是否会工作,或者是否有更好的方法来做

  • 创建一个具有实现所需特定行为的子级的处理程序类,例如具有子级的
    CarHandler
    fordHandler
    bmwHandler

  • 添加对所有组件的调用并对其进行重新构造,以便子组件返回必要的对象。e、 g.调用
    vwdhandler.getDrive
    将返回
    vwDrive.drive
    的结果,调用
    vwdhandler.getSeat
    将返回
    vwSeat.seat

  • 重构其他类,使其提供一般功能而不是特定功能,例如调用
    vwdhandler.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();    
    }
    

    我真的不理解您的问题,因为我看不到您的示例与并行继承层次结构的关系,但我不喜欢您方法中的受保护字段car


    有关更多详细信息,请参阅我的答案。公认的答案是,有一个很好的例子说明了如何在基类中封装行为。

    这种方法对我来说非常有效。事实上,我已经实现了前两个步骤,最后删除了几百行重复,并且很好地了解了未来如何进一步重构。我强烈推荐这种方法。

    你能给我们举个例子吗?@Grooveek在这之前添加了一个handler的例子,不同类型的处理程序有不同的行为吗?您确定不能将其减少为标志(具有品牌值的枚举的成员)?@Viruzzo重点是为处理程序提供不同行为的可能性,以便它们能够吸收当前引用的类的不同行为,从而通过将需要不同的行为整合到一个位置来消除这些类及其所代表的并行层次结构问题。我的问题是关于模型本身,我想知道仅仅基于品牌,经理人会有什么不同的行为;这不是在哪里实施的问题。基本上,这是一个问题,是否有可能将其简化为一个单一的层次结构问题。是的,我知道这是一个糟糕的形式,我将把它转换为一个普通的访问器和变异器,谢谢你的提醒。这应该是一个评论,而不是一个答案。如果有多个对象,如VWDIVE、vwSeat、,vwEtc这是在多个位置实现对象特定行为的并行层次结构的指示,理想情况下应集中到一个特定类和其他通用工具集中,中心特定类可以使用不同的参数调用这些工具集。vwSeat和bmwSeat是否需要有不同的行为,即不同的类型?或者它们可能只是具有不同的字段值?顺便说一句,我没有足够的声誉留下评论。