Unity3d程式必備的幾種設計模式
阿新 • • 發佈:2019-01-03
interface I { public void method1(); public void method2(); public void method3(); public void method4(); public void method5(); } class A{ public void depend1(I i){ i.method1(); } public void depend2(I i){ i.method2(); } public void depend3(I i){ i.method3(); } } class B : I{ public void method1() { Debug.Log("類B實現介面I的方法1"); } public void method2() { Debug.Log("類B實現介面I的方法2"); } public void method3() { Debug.Log("類B實現介面I的方法3"); } //對於類B來說,method4和method5不是必需的,但是由於介面A中有這兩個方法, //所以在實現過程中即使這兩個方法的方法體為空,也要將這兩個沒有作用的方法進行實現。 public void method4() {} public void method5() {} } class C{ public void depend1(I i){ i.method1(); } public void depend2(I i){ i.method4(); } public void depend3(I i){ i.method5(); } } class D : I{ public void method1() { Debug.Log("類D實現介面I的方法1"); } //對於類D來說,method2和method3不是必需的,但是由於介面A中有這兩個方法, //所以在實現過程中即使這兩個方法的方法體為空,也要將這兩個沒有作用的方法進行實現。 public void method2() {} public void method3() {} public void method4() { Debug.Log("類D實現介面I的方法4"); } public void method5() { Debug.Log("類D實現介面I的方法5"); } } public class Client{ void Start(){ A a = new A(); Debug.Log(a.depend1(new B())); Debug.Log(a.depend2(new B())); Debug.Log(a.depend3(new B())); C c = new C(); Debug.Log(c.depend1(new D())); Debug.Log(c.depend2(new D())); Debug.Log(c.depend3(new D())); } }
介面隔離原則的含義是:建立單一介面,不要建立龐大臃腫的介面,儘量細化介面,介面中的方法儘量少。
也就是說,我們要為各個類建立專用的介面,而不要試圖去建立一個很龐大的介面供所有依賴它的類去呼叫。
本文例子中,將一個龐大的介面變更為3個專用的介面所採用的就是介面隔離原則。
在程式設計中,依賴幾個專用的介面要比依賴一個綜合的介面更靈活。
介面是設計時對外部設定的“契約”,通過分散定義多個介面,可以預防外來變更的擴散,提高系統的靈活性和可維護性。
說到這裡,很多人會覺的介面隔離原則跟之前的單一職責原則很相似,其實不然。
其一,單一職責原則原注重的是職責;而介面隔離原則注重對介面依賴的隔離;其二,單一職責原則主要是約束類,其次才是介面和方法,它針對的是程式中的實現和細節;而介面隔離原則主要約束介面介面,主要針對抽象,針對程式整體框架的構建。