这种情况发生在我身上很多次,我不知道如何解决它。
接口隔离原则是为了防止出现某些接口实现不使用它的功能的情况——这是显而易见的。经常有这样的情况,我有一个接口列表,我想用它们做点什么。让我们看一个没有 ISP 的例子:
public interface IPerson
{
void Run();
void Eat();
}
public class AbcPerson : IPerson
{
void Run(){};
void Eat(){};
}
public class XyzPerson : IPerson
{
void Run(){};
void Eat(){};
}
List<IPerson> People {get;set;}
我想和每个人一起跑步。
foreach(var person in People)
{
person.Run();
}
现在我想和他们一起吃饭。
foreach(var person in People)
{
person.Eat();
}
现在,如果我想使用 ISP,我应该将代码更改为:
public interface IRunnable
{
void Run();
}
public interface IEatable
{
void Eat();
}
public class AbcPerson : IRunnable,IEatable
{
void Run(){};
void Eat(){};
}
public class XyzPerson : IRunnable,IEatable
{
void Run(){};
void Eat(){};
}
我应该如何列出我的人员名单?我应该制作两个 Runable 和 Eatable 列表并添加对象(丑陋)还是第二种方法 - 创建一个列表并在可能的情况下投射它们(丑陋)?我不知道这样做的最佳惯例是什么。
这个例子可能不是我能想象的最好的例子,但我希望你明白我的意思。
已编辑:我更改了接口和类以及原理名称。