如果 2 个类在同一个程序集中,您可以要求 2 个独立的团队就两个类使用的通用接口达成一致,然后您可以使您的代码依赖于该接口。如果这些类在不同的程序集中,但都引用另一个公共程序集,则接口可以驻留在该程序集中。
另一种选择是使用适配器模式,这将是更好的使用方法,dynamic
或者如果团队自己不会就接口达成一致。为此,您将创建公共接口以及实现它的类,这些类可以将调用转发到定制的实现。
public interface IVehicle
{
void Turn(); // specify all the methods and properties you need here.
}
public class CarAdapter : IVehicle
{
private Car car;
public CarAdapter(Car car)
{
this.car = car;
}
public void Turn()
{
this.car.Turn();
}
}
public class TruckAdapter : IVehicle
{
private Truck truck;
public TruckAdapter(Truck truck)
{
this.truck = truck;
}
public void Turn()
{
this.truck.Turn();
}
}
然后您的代码只需要一个IVehicle
public void Drive(IVehicle vehicle) { ... }
可以这样称呼:
Drive(new CarAdapter(car));
//or
Drive(new TruckAdapter(truck));
这种方法的一个优点是 Car 和 Truck可能具有稍微不同的属性、方法名称或参数等,但是您将其封装在适配器中,因此您的代码仅针对IVehicle
. 这也比创建一个Vehicle
接受 a的单个更好,Car
或者Truck
如果需要第 3 类(比如Coach
),那么您可以创建一个CoachAdapter
,而无需更改任何现有的CarAdapter
或TruckAdapter
允许您遵循 OCP(开放封闭原则 -代码应该对扩展开放,对修改关闭),这是您无法通过Vehicle
类实现的,因为您必须修改它以支持教练。