欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一.介紹

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

二.UML類圖

1.透明方式

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

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();
    }
}

四.使用場景

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

五.優(yōu)點

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

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

相關文章

  • java 多線程饑餓現象的問題解決方法

    java 多線程饑餓現象的問題解決方法

    這篇文章主要介紹了java 多線程饑餓現象的問題解決方法的相關資料,需要的朋友可以參考下
    2017-06-06
  • Java實現實時監(jiān)控目錄下文件變化的方法

    Java實現實時監(jiān)控目錄下文件變化的方法

    今天小編就為大家分享一篇關于Java實現實時監(jiān)控目錄下文件變化的方法,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Java字符串替換函數replace()用法解析

    Java字符串替換函數replace()用法解析

    這篇文章主要介紹了Java字符串替換函數replace()用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 如何使用Java模擬退火算法優(yōu)化Hash函數

    如何使用Java模擬退火算法優(yōu)化Hash函數

    為了解決局部最優(yōu)解問題,1983年,Kirkpatrick等提出了模擬退火算法(SA)能有效的解決局部最優(yōu)解問題。模擬退火算法包含兩個部分即Metropolis算法和退火過程。Metropolis算法就是如何在局部最優(yōu)解的情況下讓其跳出來,是退火的基礎
    2021-06-06
  • java設計模式之簡單工廠模式

    java設計模式之簡單工廠模式

    這篇文章主要為大家詳細介紹了java設計模式之簡單工廠模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • spring使用JavaConfig進行配置的方法

    spring使用JavaConfig進行配置的方法

    這篇文章主要介紹了spring使用JavaConfig進行配置的方法,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2021-09-09
  • java郵件發(fā)送的實現

    java郵件發(fā)送的實現

    本篇是用于java來實現郵件的發(fā)送的實例代碼,基于smtp服務,有需要的可以參考一下。
    2016-10-10
  • mybatis攔截器實現通用權限字段添加的方法

    mybatis攔截器實現通用權限字段添加的方法

    這篇文章主要給大家介紹了關于mybatis攔截器實現通用權限字段添加的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mybatis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • 如何把第三方服務注冊到spring項目容器中

    如何把第三方服務注冊到spring項目容器中

    這篇文章主要為大家介紹了如何把第三方服務注冊到spring項目容器中,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 解決idea web工程修改js文件之后不變化的問題

    解決idea web工程修改js文件之后不變化的問題

    這篇文章主要介紹了解決idea web工程修改js文件之后不變化的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論