违反接口隔离原则的情况1:
胖接口设计失误——把太多功能包含在接口里。把包含过多功能的接口类型传给功能调用者的时候,其中必然有一部分功能调用者永远用不到,自然地违反了接口隔离原则(调用者不能够多要)。这种情况下,实现这个接口的类同时违反了单一职责原则(一个类应该只做一件事,或一组相关的事)。
解决方案:把胖接口拆分,分裂成两个或更多的小接口,每个小接口都描述单一的功能。换句话说,把本质不同的功能隔离开,再用接口封装起来。
胖接口例子:
可以看出来如果想让driver实现ITank接口,就要在Driver类中,加ITank类型的字段,或者把所有的IVehicle类型的字段换为ITank类型的字段。无论怎么改都要改动Driver类。问题就在于把胖接口ITank传了进来,里面的Fire()方法是不会用到的。
//只实现司机开车的方法
class Program
{
static void Main(string[] args)
{
var driver = new Driver(new Car());
driver.Drive();
}
}
class Driver
{
private IVehicle _vehicle;
public Driver(IVehicle vehicle)
{
_vehicle = vehicle;
}
public void Drive()
{
_vehicle.Run();
}
}
interface IVehicle
{
void Run();
}
class Car : IVehicle
{
public void Run()
{
Console.WriteLine("Car is running...");
}
}
class Truck : IVehicle
{
public void Run()
{
Console.WriteLine("Truck is running...");
}
}
interface ITank
{
void