C#設計模式六大原則——接口隔離


接口隔離定義:

  一般有兩種定義:

  1:客戶端不應該依賴他不需要的接口

     2:類間的依賴關系應該建立在最小的接口上

我們在建立接口時,應該盡量建立單一,不臃腫龐大的接口,應盡量使接口細化,方法盡量少。

接口隔離原則與單一原則的區別:

  接口隔離原則和單一職責原則的審視角度不同,單一職責原則要求類和接口的職責單一,這是業務邏輯上的划分。接口隔離原則要求接口的方法盡量少,細化。

接口隔離原則的應用:

  美女,我們一般認為有好的面孔,好的身材,好的脾氣。那我們來定義一個美女的接口,有好的面孔,好的身材,好的脾氣。

public interface IPettyGirl
    {
        void GoodLooking();//要有好的面孔
        void NiceFigure();//要有好身材
        void GoodTemperament();//要有好氣質
    }

 

  實現一個具體的美女:

public class PettyGirl : IPettyGirl
    {
        private string name;
        public PettyGirl(string name)
        {
            this.name = name;
        }
        public void GoodLooking()
        {
            Console.WriteLine(name + "---有好的面孔");
        }
        public void NiceFigure()
        {
            Console.WriteLine(name + "---有好身材");
        }
        public void GoodTemperament()
        {
            Console.WriteLine(name + "---有好氣質");
        }

    }

  美女已經實現,我們定義一個抽象的星探類:

public abstract class AbstractSearcher
    {
        protected PettyGirl pettyGirl;
        public AbstractSearcher(IPettyGirl pettyGirl)
        {
            this.pettyGirl = (PettyGirl)pettyGirl;
        }
        public abstract void Show();
    }

  實現一個具體的星探:

public class Searcher : AbstractSearcher
    {
        public Searcher(IPettyGirl pettyGirl) : base(pettyGirl)
        {

        }
        public override void Show()
        {
            Console.WriteLine("----美女的信息如下:---");
            //顯示好的面孔
            base.pettyGirl.GoodLooking();
            //顯示好身材
            base.pettyGirl.NiceFigure();
            //顯示好氣質
            base.pettyGirl.GoodTemperament();
        }
    }

  然后在一個場景中實現一個星探找美女的過程:

class Program
    {
        static void Main(string[] args)
        {
            IPettyGirl xiaoHong = new PettyGirl("小紅");
            AbstractSearcher searcher = new Searcher(xiaoHong);
            searcher.Show();
            Console.ReadKey();
        }
        
    }

  顯示運行結果:

----美女的信息如下:---
小紅---有好的面孔
小紅---有好身材
小紅---有好氣質

 

然而,隨着人們審美觀點的變化,美女的定義也在發生變化,人們也會把面容一般,身材一般,脾氣特別好的女孩定義為美女,如氣質美女,但是,我們的接口已經定義了美女具備的三個條件,氣質美女不是我們定義美女的標准,這時,我們應該將接口量化,因為我們以前定義的美女太過寬泛,把美女接口拆分為兩個接口,一個是外形美女接口,一個是氣質美女接口,這樣我的接口才靈活,易於擴展和維護。

  定義兩個接口:外形美女和氣質美女

public interface IGoodBodyGirl
    {
        void GoodLooking();//要有好的面孔
        void NiceFigure();//要有好身材
    }
    public interface IGoodTemperamentGirll
    {
        void GoodTemperament();////要有好氣質
    }

  最標准美女:

public class PettyGirl : IGoodBodyGirl, IGoodTemperamentGirl
    {
        private string name;
        public PettyGirl(string name)
        {
            this.name = name;
        }
        public void GoodLooking()
        {
            Console.WriteLine(name + "---有好的面孔");
        }
        public void NiceFigure()
        {
            Console.WriteLine(name + "---有好身材");
        }
        public void GoodTemperament()
        {
            Console.WriteLine(name + "---有好氣質");
        }
    }

 

保證接口的純潔性

接口隔離原則是對接口進行規范約束。

接口要盡量小

這是接口隔離原則的核心定義,接口要盡量小,不要出現臃腫的接口,但是小也是有限度的,不能違背單一職責原則。

接口要高內聚

高內聚就是提高接口,類,模塊的處理能力,減少對外的交互。具體到接口隔離原則就是要求在接口中盡量減少公布public方法,接口是對外的承諾,承諾越少對系統開發越有利,變更的風險就越少。

接口設計是有限度的

接口的設計粒度越小,系統越靈活。但是靈活的同時也帶來了結構復雜,開發難度大,可維護性降低。所以接口設計是注意度。

接口隔離原則開發經驗

接口隔離原則是對接口的定義,同時也是對類的定義,接口和類盡量使用原子接口或原子類來組裝。我們在實踐中可以以下幾個規則來衡量:

  • 一個接口只服務於一個子模塊或業務邏輯
  • 通過業務邏輯壓縮接口中的public方法,接口要不斷的精簡,以達到接口不斷完善
  • 已經被污染的接口,盡量去修改,若變更的風險較大,則采用適配器進行轉化處理

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM