<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 接口隔離原則 英文名稱:Interface segregation Principle 先了解接口的分類: 1、**實例接口**(Object Interface):java中聲明一個類,使用new關鍵字產生一個實例,它是一個類型的事物的描述這是一種接口。 例如 Person p = new Person();創建了一個對象p,Person類就是p的接口。 2、**類接口**(Class Interface)java中使用interface定義的接口。 定義一:客戶端不應該依賴它不需要的接口。 定義二:類間的依賴關系應該建立在最小的接口上。 我的理解:定義接口時,要盡量將接口細化,按照類別的不同建立不同的接口類型。一個接口中要避免沒有共享方法的類。 **一個例子**: 星探發現美女。 1、定義一個AbstractSearcher抽象類,定義AbstractSearcher()方法和show方法, 2、星探類Searcher類,繼承抽象類。 3、IPettyGirl接口,定義美女的規范。void goodLook(),niceFigure(),greatTemperament(). 4,美女類實現IPettyGirl接口。 ![](https://box.kancloud.cn/2016-06-06_5755340708f89.jpg) ~~~ <span style="font-size:18px;">public class ISPTest { public static void main(String[] args) { Researcher r = new Researcher("lzl"); r.show(); r.AbstractSearch(new Girl("xy")); } } abstract class AbstractSearcher{ public abstract void AbstractSearch(IPettyGirl pettyGirl); public abstract void show(); } class Researcher extends AbstractSearcher{ private String name; public Researcher(String name) { this.name = name; } @Override public void AbstractSearch(IPettyGirl pettyGirl) { pettyGirl.goodLook(); pettyGirl.greatTemperament(); pettyGirl.niceFigure(); } @Override public void show() { System.out.println(this.name+":星探展示發現美女...."); } } interface IPettyGirl{ public void goodLook(); public void niceFigure(); public void greatTemperament(); } class Girl implements IPettyGirl{ private String name; public Girl(String name) { this.name = name; } @Override public void goodLook() { // TODO Auto-generated method stub System.out.println(this.name+"很好看..."); } @Override public void niceFigure() { // TODO Auto-generated method stub System.out.println(this.name+"身材很棒!"); } @Override public void greatTemperament() { // TODO Auto-generated method stub System.out.println(this.name+"很有氣質!"); } }</span> ~~~ -**--需求變更:** 以上對美女的要求是同時滿足這三個條件,那么現在要求滿足分類:滿足氣質好的屬于內在型美女,滿足身材好和長相好的屬于外在型美女。 此時我們發現定義的IPettyGirl接口中封裝了氣質好的內在型美女,這樣此接口就顯得臃腫了,靈活性不高,可維護性也不好。 解決方案: 將IPettyGirl接口劃分為兩個接口ITemperamentPettyGirl和IGoodBodyGirl. 星探類可以分別發現這兩款美女。 ![](https://box.kancloud.cn/2016-06-06_5755340721c0f.jpg) ~~~ public class ISPTest2 { public static void main(String[] args) { Researcher2 r1 = new Researcher2("lzl"); r1.show(); r1.AbstractSearch((ITemperamentPettyGirl)new Girl2("xy")); } } abstract class AbstractSearcher2{ public abstract void AbstractSearch(ITemperamentPettyGirl temperamentGirl); public abstract void AbstractSearch(IGoodBodyGirl goodBodyGirl); public abstract void show(); } class Researcher2 extends AbstractSearcher2{ private String name; public Researcher2(String name) { this.name = name; } @Override public void AbstractSearch(ITemperamentPettyGirl temperamentGirl) { temperamentGirl.greatTemperament(); } @Override public void AbstractSearch(IGoodBodyGirl goodBodyGirl) { // TODO Auto-generated method stub goodBodyGirl.goodLook(); goodBodyGirl.niceFigure(); } @Override public void show() { // TODO Auto-generated method stub System.out.println(this.name+"星探發現美女..."); } } //氣質型美女 interface ITemperamentPettyGirl{ public void greatTemperament(); } //身材好美女 interface IGoodBodyGirl{ public void goodLook(); public void niceFigure(); } class Girl2 implements ITemperamentPettyGirl,IGoodBodyGirl{ private String name; public Girl2(String name) { this.name = name; } @Override public void goodLook() { // TODO Auto-generated method stub System.out.println(this.name+"很好看..."); } @Override public void niceFigure() { // TODO Auto-generated method stub System.out.println(this.name+"身材很棒!"); } @Override public void greatTemperament() { // TODO Auto-generated method stub System.out.println(this.name+"很有氣質!"); } } ~~~ 以上把一個臃腫的接口變更為兩個獨立的接口所依賴的原則就是接口隔離原則。 接口是我們設計時對外提供的契約,通過分散定義多個接口,可以預防未來變更的擴散,提高系統的靈活性和可維護性。 接口隔離原則是對接口進行的規范約束,有以下四層含義(摘自《設計模式之禪》) 1、接口要盡量小 接口在遵守單一職責原則的基礎下,盡可能細化接口的方法。并不是無休止的細化接口。 2、接口要高內聚 高內聚是提高接口、類、模塊的處理能力,減少對外的交互。在接口中盡量少公布public方法,接口是對外的承諾,承諾越少對外越有利,變更的風險也就越少,同時有利于降低成本 3、定制服務 根據需求分析,必要時為特殊用戶提供定制的接口,盡量避免不同操作人群使用同一接口,這樣會降低系統的響應速度和擴展性。 4、接口設計是有限度的 根據開發情景來劃分設計接口,在開發過程中設計接口的顆粒度越小,系統靈活性越高。并不是以為的將接口細化。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看