我正在考虑使用“访客”模式。
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{}这样,您就可以避免多余的继承树,并使格式化逻辑与Vehicle类分开。当然,当您创建新的载具时,您必须向Formatter接口添加另一种方法(并在Formatter接口的所有实现中实现此新方法)。
但是,我认为这比创建一个新的Vehicle类更好,对于您拥有的每个IVehicleFormatter,都可以创建一个可以处理这种新型车辆的新类。



