最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java結構型模式中的組合模式詳解

 更新時間:2023年02月16日 16:18:35   作者:非凡的小笨魚  
組合模式,又叫部分整體模式,它創(chuàng)建了對象組的數(shù)據(jù)結構組合模式使得用戶對單個對象和組合對象的訪問具有一致性。本文將通過示例為大家詳細介紹一下組合模式,需要的可以參考一下

一.介紹

組合模式(Composite Pattern)屬于結構型模式。組合模式又叫作部分整體模式,它是一種將對象組合成樹狀層次結構的模式,用來表示整體-部分的關系,使用戶對單個對象和組合對象具有一致的訪問性。組合模式有透明方式和安全方式兩種實現(xiàn)方式

二.UML類圖

1.透明方式

  • 抽象節(jié)點中定義了規(guī)范,客戶端無需區(qū)別葉子節(jié)點和樹枝節(jié)點,使用方便
  • 葉子節(jié)點本來無add、remove、getChild方法,但是因為抽象中定義了規(guī)范,所以必須實現(xiàn)它們,會帶來一些安全性問題

2.安全方式

  • 客戶端需要區(qū)別葉子節(jié)點和樹枝節(jié)點,使用不方便
  • 葉子節(jié)點無add、remove、getChild方法,不存在安全性問題

三.具體代碼

業(yè)務代碼

//抽象節(jié)點
public abstract class Component {
    abstract void add(Component component);
    abstract void remove(Component component);
    abstract Component getChild(int i);
    abstract void operation();
}
//葉子節(jié)點
class Leaf extends Component{
    private String name;
    public Leaf(String name) {
        this.name = name;
    }
    @Override
    void add(Component component) {}
    @Override
    void remove(Component component) {}
    @Override
    Component getChild(int i) {
        return null;
    }
    @Override
    void operation() {
        System.out.print(name);
    }
}
//樹枝節(jié)點
class Composite extends Component{
    private ArrayList<Component> children = new ArrayList<>();
    @Override
    void add(Component component) {
       children.add(component);
    }
    @Override
    void remove(Component component) {
        children.remove(component);
    }
    @Override
    Component getChild(int i) {
        return children.get(i);
    }
    @Override
    void operation() {
        children.forEach(Component::operation);
    }
}

客戶端

public class Client {
    public static void main(String[] args) {
        Component level1 = new Composite();
        level1.add(new Leaf("1"));
        level1.add(new Leaf("2"));
        Component level2 = new Composite();
        level2.add(new Leaf("2.1"));
        level1.add(level2);
        level1.operation();
    }
}

四.使用場景

  • 需要表示一個對象整體與部分的層次結構
  • 要求對用戶隱藏組合對象與單個對象的不同,用戶可以使用統(tǒng)一的接口操作組合結構中的所有對象
  • 組織機構樹
  • 文件/文件夾

五.優(yōu)點

  • 簡化了客戶端代碼(客戶端一致地處理單個對象和組合對象)
  • 符合開閉原則(新增具體實現(xiàn)類不需要更改源代碼)

到此這篇關于Java結構型模式中的組合模式詳解的文章就介紹到這了,更多相關Java組合模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于@Bean的使用方式

    關于@Bean的使用方式

    這篇文章主要介紹了關于@Bean的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • MyBatis-Plus如何實現(xiàn)自動加密解密

    MyBatis-Plus如何實現(xiàn)自動加密解密

    這篇文章主要介紹了MyBatis-Plus實現(xiàn)自動加密解密方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot Junit 執(zhí)行順序詳解

    springboot Junit 執(zhí)行順序詳解

    這篇文章主要介紹了springboot Junit 執(zhí)行順序,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring中的聲明式事務控制詳解

    Spring中的聲明式事務控制詳解

    這篇文章主要介紹了Spring中的聲明式事務控制詳解,Spring的聲明式事務顧名思義就是采用聲明的方式來處理事務,這里所說的聲明,就是指在配置文件中聲明,用在Spring配置文件中聲明式的事務處理來代替代碼是的處理事務,需要的朋友可以參考下
    2024-01-01
  • Springboot實現(xiàn)多文件上傳代碼解析

    Springboot實現(xiàn)多文件上傳代碼解析

    這篇文章主要介紹了Springboot實現(xiàn)多文件上傳代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • SpringCloud整合Netty集群實現(xiàn)WebSocket的示例代碼

    SpringCloud整合Netty集群實現(xiàn)WebSocket的示例代碼

    文章主要介紹了SpringCloud整合Netty集群實現(xiàn)WebSocket的相關內(nèi)容,包括服務注冊和發(fā)現(xiàn)中心的配置,如使用Nacos、CommandLineRunner啟動Netty服務等,還介紹了通過Redis實現(xiàn)消息發(fā)布訂閱的機制,需要的朋友可以參考下
    2024-11-11
  • Sprint Boot 集成MongoDB的操作方法

    Sprint Boot 集成MongoDB的操作方法

    最近接手一個Springboot項目,需要在原項目上增加一些需求,用到了mongodb。下面通過本文給大家分享Sprint Boot 集成MongoDB的操作方法,需要的朋友參考下吧
    2017-12-12
  • 在Spring中實現(xiàn)異步處理的步驟和代碼演示

    在Spring中實現(xiàn)異步處理的步驟和代碼演示

    在Spring中實現(xiàn)異步處理通常涉及到@Async注解,通過步驟和代碼演示,可以在Spring應用程序中實現(xiàn)異步處理,記住要根據(jù)你的應用程序的實際需求來調(diào)整線程池和異步方法的設計,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • jsoup如何爬取圖片到本地

    jsoup如何爬取圖片到本地

    這篇文章主要為大家詳細介紹了jsoup如何爬取圖片到本地,jsoup爬取網(wǎng)站信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • SpringBoot 整合Jest實例代碼講解

    SpringBoot 整合Jest實例代碼講解

    本文通過實例代碼給大家介紹了SpringBoot 整合Jest的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08

最新評論

德惠市| 盐津县| 施甸县| 汪清县| 化州市| 芦溪县| 德化县| 清丰县| 鄯善县| 丽水市| 定安县| 防城港市| 宝清县| 石狮市| 闸北区| 刚察县| 吉隆县| 白水县| 古交市| 绩溪县| 达拉特旗| 策勒县| 郸城县| 武川县| 扎囊县| 鸡西市| 兴山县| 西华县| 黑水县| 平顺县| 江北区| 龙井市| 龙海市| 甘谷县| 黔江区| 蛟河市| 汾阳市| 盐边县| 锡林浩特市| 肇州县| 启东市|