必知必會的設計原則——介面隔離原則

realyrare發表於2023-02-10

設計原則系列文章

必知必會的設計原則——單一職責原則

必知必會的設計原則——開放封閉原則

必知必會的設計原則——依賴倒置原則

必知必會的設計原則——里氏替換原則

概述

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();
        }
    }

以上程式碼使用介面隔離原則後,介面職責很清晰,定義的介面不再像之前的大而全。

總結

介面隔離原則和單一職責原則很像,關於二者之間的關係在開頭概述裡面已經描述,如有疑問歡迎與我交流。

相關文章