接口分离 原则 就是 为了对 接口的 进一步 细分,实现 低耦合,比如 公司 中的,各个部门,如财务,销售,技术 等,都是为了 低耦合 设计的。
下面举例 说明:
1.1没有遵循 接口分离的接口设计
namespace 接口分离
{
public class Program
{
static void Main(string[] args)
{
}
}
public interface iMessage
{
//修改成绩
void AmandScore();
//添加成绩
void AddScore();
//删除成绩
void DelScore();
//查询成绩
void SelectScore();
//打印成绩
void PrintScore();
}
}
1.2如果有老师类需要继承此模块接口,完全没有问题,因为老师有 这个模块的所有权限
namespace 接口分离
{
public class Program
{
static void Main(string[] args)
{
}
}
public interface iMessage
{
//修改成绩
void AmandScore();
//添加成绩
void AddScore();
//删除成绩
void DelScore();
//查询成绩
void SelectScore();
//打印成绩
void PrintScore();
}
//老师继承 iMessage 没有问题,因为老师 应当 有此所有权限
public class Teacher : iMessage
{
}
}
1.3如果有个学生类 需要继承此 模块接口,就有问题了,学生类需要实现模块中每个接口,但是 学生只能有 查询成绩 与打印成绩的权限。
namespace 接口分离
{
public class Program
{
static void Main(string[] args)
{
}
}
public interface IMessage
{
//修改成绩
void AmandScore();
//添加成绩
void AddScore();
//删除成绩
void DelScore();
//查询成绩
void SelectScore();
//打印成绩
void PrintScore();
}
public class Teacher : IMessage
{
}
//这里就不符合 逻辑了,因为学生 只能有 查询成绩与 打印成绩的权限,不能实现其他接口的权限
public class Student: IMessage
{
}
}
2解决方法就需要把 IMessage接口模块 在做细分,分为 学生和教师,学生类和教师类分别继承IMessageTeacher和IMessageStudent。下面例程就是对于上面问题的解决,从而实现 接口分离 原则
namespace 接口分离
{
public class Program
{
static void Main(string[] args)
{
}
}
public interface IMessageTeacher
{
//修改成绩
void AmandScore();
//添加成绩
void AddScore();
//删除成绩
void DelScore();
}
public interface IMessageStudent
{
//查询成绩
void SelectScore();
//打印成绩
void PrintScore();
}
public class Teacher : IMessageTeacher, IMessageStudent
{
}
public class Student: IMessageStudent
{
}
}