C#设计原则:5.接口隔离原则 u3d学习总结笔记本

接口隔离原则(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曲线移动方法:一维");
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40346899/article/details/105558655