必知必会的设计原则——接口隔离原则
设计原则系列文章
- 必知必会的设计原则——单一职责原则
- 必知必会的设计原则——开放封闭原则
- 必知必会的设计原则——依赖倒置原则
- 必知必会的设计原则——里氏替换原则
- 必知必会的设计原则——接口隔离原则
- 必知必会的设计原则——迪米特原则
- 必知必会的设计原则——合成复用原则
概述
1、 客户端不应该依赖它不需要的接口。
2、 一个类对另一个类的依赖应该建立在最小接口上。
3、接口应尽量细分,不要在一个接口中放很多方法。
接口分离和单一原则关系
单一职责:只做一件事 /影响类变化的原因只有一个。目的是你为了高内聚(模块内部的相似程度).
接口隔离:目的是为了低耦合(模块之间的依赖程度要低)。
未使用接口隔离原则的代码
public interface IScore { void QueryScore(); void UpdateScore(); void AddScore(); void DeleteScore(); double GetSumScore(); double GetAvgScore(); void PrintScore(); void SendScore(); } public class Teacher : IScore { public void AddScore() { throw new NotImplementedException(); } public void DeleteScore() { throw new NotImplementedException(); } public double GetAvgScore() { throw new NotImplementedException(); } public double GetSumScore() { throw new NotImplementedException(); } public void PrintScore() { throw new NotImplementedException(); } public void QueryScore() { throw new NotImplementedException(); } public void SendScore() { throw new NotImplementedException(); } public void UpdateScore() { throw new NotImplementedException(); } } public class Student : IScore { public void AddScore() { throw new NotImplementedException(); } public void DeleteScore() { throw new NotImplementedException(); } public double GetAvgScore() { throw new NotImplementedException(); } public double GetSumScore() { throw new NotImplementedException(); } public void PrintScore() { throw new NotImplementedException(); } public void QueryScore() { throw new NotImplementedException(); } public void SendScore() { throw new NotImplementedException(); } public void UpdateScore() { throw new NotImplementedException(); } }
以上定义成绩接口,接口里面包含的方法分别为查询成绩,添加成绩、修改成绩、删除成绩、成就求和,成绩求平均数、打印成绩、发送成绩。Teacher和student类都实现IScore的方法 ,有些方法教师或学生根本没必要实现。
使用接口隔离原则的代码
public interface ITeacherScore { void AddScore(); void DeleteScore(); double GetSumScore(); double GetAvgScore(); void PrintScore(); void SendScore(); } public class Teacher2 : ITeacherScore { public void AddScore() { throw new NotImplementedException(); } public void DeleteScore() { throw new NotImplementedException(); } public double GetAvgScore() { throw new NotImplementedException(); } public double GetSumScore() { throw new NotImplementedException(); } public void PrintScore() { throw new NotImplementedException(); } public void SendScore() { throw new NotImplementedException(); } } public interface IStudentScore { void QueryScore(); void PrintScore(); } public class Student2 : IStudentScore { public void PrintScore() { throw new NotImplementedException(); } public void QueryScore() { throw new NotImplementedException(); } }
以上代码使用接口隔离原则后,接口职责很清晰,定义的接口不再像之前的大而全。
总结
接口隔离原则和单一职责原则很像,关于二者之间的关系在开头概述里面已经描述,如有疑问欢迎与我交流。
作者:realyrare
出处:https://www.cnblogs.com/mhg215/
声援博主:如果您觉得文章对您有帮助,请点击文章末尾的【关注我】吧!
别忘记点击文章右下角的【推荐】支持一波。~~~///(^v^)\\\~~~ .
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果您有其他问题,也欢迎关注我下方的公众号,可以联系我一起交流切磋!