接口隔离原则(ISP)
Interface Segregation Principe,简称:ISP。
类的依赖关系应建立在最小接口上,不要都塞在一起。高层类不需要多余的接口。
问题由来:
写工具的时候,总会有考虑不全面的情况,例如根据单一职责原则把相关功能接口都综合集中在了一个类里面。
然后导致在使用时,发现很多功能只会使用其中一个,其余功能完全是多余的。
解决方案:
通过细分接口功能,将综合接口拆分成多个独立功能。
依赖几个专用的接口要比依赖一个综合的接口更灵活,提高系统的灵活性和可维护性。
接口隔离原则就是要求只提供尽可能小的接口,需要高内聚,不需要的行为要隐藏起来。
代码例子:
在Start里声明出A1,A2 类
很多时候我使用移动的方法只是针对一种类型
float,vector2,vector3...等等
若是对 float 使用,这个时候A1里的 vector2 和 vector3 的方法就等于没用了
而A1则是实现了细分接口,不会有多余功能。
结果:
void Start()
{
A1 a1 = new A1(); //新建移动类;
a1.move_Vector1(); //使用功能
A2 a2 = new A2(); //新建移动类;
a2.move_Vector1(); //使用功能
}
抽象接口定义:细分
public interface I1 //细分接口 一维移动
{
void move_Vector1();
}
public interface I2 //细分接口 二维移动
{
void move_Vector2();
}
public interface I3 //细分接口 三维移动
{
void move_Vector3();
}
抽象接口定义:综合
public interface I4 //综合接口 移动方法集合
{
void move_Vector1();
void move_Vector2();
void move_Vector3();
}
工具实现接口方法
public class A1 : I4 //实现综合接口
{
public void move_Vector1()
{
Debug.Log("A1曲线移动方法:一维");
}
public void move_Vector2()
{
Debug.Log("A1曲线移动方法:二维");
}
public void move_Vector3()
{
Debug.Log("A1曲线移动方法:三维");
}
}
public class A2 : I1 //实现细分接口
{
public void move_Vector1()
{
Debug.Log("A2曲线移动方法:一维");
}
}