亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設(shè)計模式之接口隔離原則精解

 更新時間:2022年02月08日 11:40:20   作者:張起靈-小哥  
設(shè)計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。本篇介紹設(shè)計模式七大原則之一的接口隔離原則

1.什么是接口隔離原則?

客戶端不應(yīng)該依賴它不需要的接口,即一個類對另一個類的依賴應(yīng)該建立在最小的接口范圍上。

2.對應(yīng)代碼

上面這張圖呢,就違反了接口隔離原則。它對應(yīng)的代碼如下:??????

package com.szh.principle.segregation;
 
/**
 *
 */
interface Interface1 {
    void operation1();
    void operation2();
    void operation3();
    void operation4();
    void operation5();
}
 
class B implements Interface1 {
    public void operation1() {
        System.out.println("B 實現(xiàn)了 operation1");
    }
    public void operation2() {
        System.out.println("B 實現(xiàn)了 operation2");
    }
    public void operation3() {
        System.out.println("B 實現(xiàn)了 operation3");
    }
    public void operation4() {
        System.out.println("B 實現(xiàn)了 operation4");
    }
    public void operation5() {
        System.out.println("B 實現(xiàn)了 operation5");
    }
}
 
class D implements Interface1 {
    public void operation1() {
        System.out.println("D 實現(xiàn)了 operation1");
    }
    public void operation2() {
        System.out.println("D 實現(xiàn)了 operation2");
    }
    public void operation3() {
        System.out.println("D 實現(xiàn)了 operation3");
    }
    public void operation4() {
        System.out.println("D 實現(xiàn)了 operation4");
    }
    public void operation5() {
        System.out.println("D 實現(xiàn)了 operation5");
    }
}
 
class A { //A 類通過接口Interface1 依賴(使用) B類,但是只會用到1,2,3方法
    public void depend1(Interface1 i) {
        i.operation1();
    }
    public void depend2(Interface1 i) {
        i.operation2();
    }
    public void depend3(Interface1 i) {
        i.operation3();
    }
}
 
class C { //C 類通過接口Interface1 依賴(使用) D類,但是只會用到1,4,5方法
    public void depend1(Interface1 i) {
        i.operation1();
    }
    public void depend4(Interface1 i) {
        i.operation4();
    }
    public void depend5(Interface1 i) {
        i.operation5();
    }
}
 
public class Segregation1 {
    public static void main(String[] args) {
        A a = new A();
        a.depend1(new B()); // A類通過接口去依賴B類
        a.depend2(new B());
        a.depend3(new B());
 
        C c = new C();
        c.depend1(new D()); // C類通過接口去依賴(使用)D類
        c.depend4(new D());
        c.depend5(new D());
    }
}

代碼雖然很長,但是不難理解。A類依賴了B類,但是只會用到頂級接口中的1、2、3這三個方法;而C類依賴了D類,但是只會用到頂級接口中的1、4、5這三個方法,也就是說在A和B這兩個類的層面上而言,和頂級接口中的4、5兩個方法是沒什么關(guān)聯(lián)的,那么B類在實現(xiàn)頂級接口的時候就沒必要重寫4、5這兩個方法了。但是這里有一個問題就是頂級接口中包括了1到5這五個方法,你如果實現(xiàn)這個接口就必須重寫這五個方法,那么我們就可以考慮將頂級接口拆分成多個接口,需要用到哪個就實現(xiàn)哪個,這也就是所謂的接口隔離了。

3.改進(jìn)代碼

經(jīng)過上面的一番敘述,我們可以將代碼改寫成下面的形式。

即將頂級接口拆分成3個小接口,B、D兩個類根據(jù)實際情況該實現(xiàn)哪個接口就實現(xiàn)哪個接口(因為這五個方法已經(jīng)被分開了)。

package com.szh.principle.segregation.improve;
 
/**
 *
 */
interface Interface1 {
    void operation1();
}
 
interface Interface2 {
    void operation2();
    void operation3();
}
 
interface Interface3 {
    void operation4();
    void operation5();
}
 
class B implements Interface1, Interface2 {
    public void operation1() {
        System.out.println("B 實現(xiàn)了 operation1");
    }
 
    public void operation2() {
        System.out.println("B 實現(xiàn)了 operation2");
    }
 
    public void operation3() {
        System.out.println("B 實現(xiàn)了 operation3");
    }
}
 
class D implements Interface1, Interface3 {
    public void operation1() {
        System.out.println("D 實現(xiàn)了 operation1");
    }
 
    public void operation4() {
        System.out.println("D 實現(xiàn)了 operation4");
    }
 
    public void operation5() {
        System.out.println("D 實現(xiàn)了 operation5");
    }
}
 
class A { // A 類通過接口Interface1,Interface2 依賴(使用) B類,但是只會用到1,2,3方法
    public void depend1(Interface1 i) {
        i.operation1();
    }
 
    public void depend2(Interface2 i) {
        i.operation2();
    }
 
    public void depend3(Interface2 i) {
        i.operation3();
    }
}
 
class C { // C 類通過接口Interface1,Interface3 依賴(使用) D類,但是只會用到1,4,5方法
    public void depend1(Interface1 i) {
        i.operation1();
    }
 
    public void depend4(Interface3 i) {
        i.operation4();
    }
 
    public void depend5(Interface3 i) {
        i.operation5();
    }
}
 
public class Segregation2 {
    public static void main(String[] args) {
        A a = new A();
        a.depend1(new B()); // A類通過接口去依賴B類
        a.depend2(new B());
        a.depend3(new B());
 
        C c = new C();
        c.depend1(new D()); // C類通過接口去依賴(使用)D類
        c.depend4(new D());
        c.depend5(new D());
    }
}

4.接口隔離原則總結(jié)

  1. 類A通過接口Interface1依賴類B,類C通過接口Interfacel依賴類D,如果接口Interface1對于類A和類C來說不是最小接口,那么類B和類D必須去實現(xiàn)他們不需要的方法。
  2. 將接口Interface1拆分為獨立的幾個接口,類A和類C分別與他們需要的接口建立依賴關(guān)系。也就是采用接口隔離原則。

到此這篇關(guān)于Java設(shè)計模式之接口隔離原則精解的文章就介紹到這了,更多相關(guān)Java 接口隔離原則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PowerJob的ProcessorLoader工作流程源碼解讀

    PowerJob的ProcessorLoader工作流程源碼解讀

    這篇文章主要為大家介紹了PowerJob的ProcessorLoader工作流程源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 淺析Java中線程的創(chuàng)建和啟動

    淺析Java中線程的創(chuàng)建和啟動

    這篇文章運(yùn)用實例代碼介紹了Java中線程的創(chuàng)建和啟動,非常詳細(xì),有需要的朋友們可以參考借鑒,下面一起來看看。
    2016-08-08
  • Java搶紅包的紅包生成算法

    Java搶紅包的紅包生成算法

    現(xiàn)在日常生活中搶紅包已經(jīng)成了日常游戲,本篇文章主要介紹了Java搶紅包的紅包生成算法,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • Java多線程之Interrupt中斷線程詳解

    Java多線程之Interrupt中斷線程詳解

    Interrupt 的其作用是"中斷"線程, 但實際上線程仍會繼續(xù)運(yùn)行, 這是一個非常容易混淆的概念. Interrupt 的真正作用是給線程對象設(shè)置一個中斷標(biāo)記, 并不會影響線程的正常運(yùn)行,需要的朋友可以參考下
    2021-05-05
  • 簡單了解Spring IoC相關(guān)概念原理

    簡單了解Spring IoC相關(guān)概念原理

    這篇文章主要介紹了簡單了解Spring IoC相關(guān)概念原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Maven依賴沖突原因以及解決方法

    Maven依賴沖突原因以及解決方法

    依賴沖突是指項目依賴的某一個 jar 包,有多個不同的版本,因而造成類包版本沖突依賴沖突很經(jīng)常是類包之間的間接依賴引起的,本文將給大家介紹Maven依賴沖突原因以及解決方法,需要的朋友可以參考下
    2023-12-12
  • Java定義畫板類的方法

    Java定義畫板類的方法

    這篇文章主要為大家詳細(xì)介紹了Java定義畫板類的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Spring MVC注解式開發(fā)示例完整過程

    Spring MVC注解式開發(fā)示例完整過程

    這篇文章主要介紹了Spring MVC注解式開發(fā)示例完整過程,MVC注解式開發(fā)即處理器基于注解的類開發(fā),對于每一個定義的處理器,無需在xml中注冊,只需在代碼中通過對類與方法的注解,即可完成注冊
    2023-02-02
  • Linux中JDK安裝配置教程

    Linux中JDK安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了Linux中JDK安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Windows10 Java環(huán)境變量配置過程圖解

    Windows10 Java環(huán)境變量配置過程圖解

    這篇文章主要介紹了Windows10 Java環(huán)境變量配置過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07

最新評論