設計原則系列文章 必知必會的設計原則——單一職責原則 必知必會的設計原則——開放封閉原則 必知必會的設計原則——依賴倒置原則 必知必會的設計原則——里氏替換原則 概述 1、 客戶端不應該依賴它不需要的介面。2、 一個類對另一個類的依賴應該建立在最小介面上。3、介面應儘量細分,不要在一個介面中放很多方 ...
設計原則系列文章
必知必會的設計原則——單一職責原則
必知必會的設計原則——開放封閉原則
必知必會的設計原則——依賴倒置原則
必知必會的設計原則——里氏替換原則
概述
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(); } }
以上代碼使用介面隔離原則後,介面職責很清晰,定義的介面不再像之前的大而全。
總結
介面隔離原則和單一職責原則很像,關於二者之間的關係在開頭概述裡面已經描述,如有疑問歡迎與我交流。
作者:課間一起牛
出處:https://www.cnblogs.com/mhg215/
聲援博主:如果您覺得文章對您有幫助,請點擊文章末尾的【關註我】吧!
別忘記點擊文章右下角的【推薦】支持一波。~~~///(^v^)\\\~~~ .
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
如果您有其他問題,也歡迎關註我下方的公眾號,可以聯繫我一起交流切磋!