避免并行继承层次结构

2023-12-22

我有两个并行的继承链:

Vehicle <- Car
        <- Truck <- etc.

VehicleXMLFormatter <- CarXMLFormatter
                    <- TruckXMLFormatter <- etc.

我的经验是,随着并行继承层次结构的增长,它们可能会成为维护上的难题。

即不添加toXML(), toSoap(), toYAML()我的主要课程的方法。

如何在不破坏关注点分离概念的情况下避免并行继承层次结构?


我正在考虑使用访客模式。

public class Car : Vehicle
{
   public void Accept( IVehicleFormatter v )
   {
       v.Visit (this);
   }
}

public class Truck : Vehicle
{
   public void Accept( IVehicleFormatter v )
   {
       v.Visit (this);
   }
}

public interface IVehicleFormatter
{
   public void Visit( Car c );
   public void Visit( Truck t );
}

public class VehicleXmlFormatter : IVehicleFormatter
{
}

public class VehicleSoapFormatter : IVehicleFormatter
{
}

这样,您就可以避免额外的继承树,并将格式化逻辑与您的车辆类分开。 当然,当您创建新车辆时,您必须向 Formatter 接口添加另一个方法(并在 formatter 接口的所有实现中实现这个新方法)。
但是,我认为这比创建一个新的 Vehicle 类更好,并且为您拥有的每个 IVehicleFormatter 创建一个可以处理这种新型车辆的新类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免并行继承层次结构 的相关文章

随机推荐