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

Java設(shè)計模式中組合模式應(yīng)用詳解

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

編程是一門藝術(shù),大批量的改動顯然是非常丑陋的做法,用心的琢磨寫的代碼讓它變的更美觀。

在現(xiàn)實生活中,存在很多“部分-整體”的關(guān)系,例如,大學(xué)中的部門與學(xué)院、總公司中的部門與分公司、學(xué)習(xí)用品中的書與書包等。

在軟件開發(fā)中也是這樣,例如,文件系統(tǒng)中的文件與文件夾、窗體程序中的簡單控件與容器控件等。對這些簡單對象與復(fù)合對象的處理,如果用組合模式來實現(xiàn)會很方便。

1.組合設(shè)計模式定義

組合(Composite Pattern)設(shè)計模式的定義:有時又叫作整體-部分(Part-Whole)模式,它是一種將對象組合成樹狀的層次結(jié)構(gòu)的模式,用來表示“整體-部分”的關(guān)系,使用戶對單個對象和組合對象具有一致的訪問性。

組合模式一般用來描述整體與部分的關(guān)系,它將對象組織到樹形結(jié)構(gòu)中,頂層的節(jié)點被稱為根節(jié)點,根節(jié)點下面可以包含樹枝節(jié)點和葉子節(jié)點,樹枝節(jié)點下面又可以包含樹枝節(jié)點和葉子節(jié)點。

2.組合設(shè)計模式的優(yōu)點與不足

組合模式的主要優(yōu)點有:

  • 組合模式使得客戶端代碼可以一致地處理單個對象和組合對象,無須關(guān)心自己處理的是單個對象,還是組合對象,這簡化了客戶端代碼;
  • 更容易在組合體內(nèi)加入新的對象,客戶端不會因為加入了新的對象而更改源代碼,滿足“開閉原則”;

其主要不足是:

  • 設(shè)計較復(fù)雜,客戶端需要花更多時間理清類之間的層次關(guān)系;
  • 不容易限制容器中的構(gòu)件;
  • 不容易用繼承的方法來增加構(gòu)件的新功能;

3.組合模式的實現(xiàn)思路

組合模式包含以下主要角色:

  • 抽象構(gòu)件(Component)角色:它的主要作用是為樹葉構(gòu)件和樹枝構(gòu)件聲明公共接口,并實現(xiàn)它們的默認行為。在透明式的組合模式中抽象構(gòu)件還聲明訪問和管理子類的接口;在安全式的組合模式中不聲明訪問和管理子類的接口,管理工作由樹枝構(gòu)件完成。(總的抽象類或接口,定義一些通用的方法,比如新增、刪除)
  • 樹葉構(gòu)件(Leaf)角色:是組合中的葉節(jié)點對象,它沒有子節(jié)點,用于繼承或?qū)崿F(xiàn)抽象構(gòu)件。
  • 樹枝構(gòu)件(Composite)角色 / 中間構(gòu)件:是組合中的分支節(jié)點對象,它有子節(jié)點,用于繼承和實現(xiàn)抽象構(gòu)件。它的主要作用是存儲和管理子部件,通常包含 Add()、Remove()、GetChild() 等方法。

4.組合設(shè)計模式代碼示例

場景介紹:將地區(qū)區(qū)域分級表示,使用其他的方式很難將層次結(jié)構(gòu)表達清楚,使用組合設(shè)計模式就非常方便。

public abstract class Node {
    private String name;
    public Node(String name){
        this.name = name;
    }
    /**
     * 獲取子節(jié)點
     * @return
     */
    public abstract List<Node> getChildren();
    public String getName() {
        return name;
    }
}
/**
 * 葉子節(jié)點
 */
public class LeafNode extends Node{
    public LeafNode(String name) {
        super(name);
    }
    @Override
    public List<Node> getChildren() {
        return null;
    }
}
/**
 * 區(qū)節(jié)點
 */
public class DistrictNode extends Node{
    private List<Node> children = new ArrayList<>();
    public DistrictNode(String name) {
        super(name);
    }
    @Override
    public List<Node> getChildren() {
        return children;
    }
    public void addChild(Node node){
        children.add(node);
    }
    public void delChild(int i){
        children.remove(i);
    }
}
 public static void main(String[] args) {
        //根目錄
        DistrictNode root = new DistrictNode("root");
        //一線目錄
        root.addChild(new DistrictNode("shang hai"));
        root.addChild(new DistrictNode("tian jin"));
        DistrictNode districtNode = new DistrictNode("bei jing");
        root.addChild(districtNode);
        //二級目錄
        districtNode.addChild(new DistrictNode("hai dian qu"));
        districtNode.addChild(new DistrictNode("xi cheng qu"));
        DistrictNode districtNode2 = new DistrictNode("chao yang qu");
        districtNode.addChild(districtNode2);
        //三級目錄
        districtNode2.addChild(new LeafNode("san li tun "));
        districtNode2.addChild(new LeafNode("guo mao"));
        System.out.println(JsonOutput.toJson(root));
    }

使用組合模式,很清晰的將分層的數(shù)據(jù)進行組織,以后遇到類似這樣的數(shù)據(jù),可以采用這個方式處理。

5.組合設(shè)計模式應(yīng)用場景

前面分析了組合模式的結(jié)構(gòu)與特點,下面分析它適用的以下應(yīng)用場景。

  • 在需要表示一個對象整體與部分的層次結(jié)構(gòu)的場合。
  • 要求對用戶隱藏組合對象與單個對象的不同,用戶可以用統(tǒng)一的接口使用組合結(jié)構(gòu)中的所有對象的場合。

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

相關(guān)文章

  • Spring?Initializr只能創(chuàng)建為Java?17版本以上的問題解決

    Spring?Initializr只能創(chuàng)建為Java?17版本以上的問題解決

    這篇文章主要給大家介紹了關(guān)于Spring?Initializr只能創(chuàng)建為Java?17版本以上問題的解決辦法,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • Spring Boot整合MyBatis操作過程

    Spring Boot整合MyBatis操作過程

    這篇文章主要介紹了Spring Boot整合MyBatis操作過程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-04-04
  • JAVA 對50取余數(shù)的五種方法試下

    JAVA 對50取余數(shù)的五種方法試下

    在數(shù)學(xué)計算中經(jīng)常會遇到余數(shù),本文主要介紹了JAVA 對50取余數(shù)的五種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • linux配置java環(huán)境變量詳細過程

    linux配置java環(huán)境變量詳細過程

    這篇文章主要介紹了linux配置java環(huán)境變量詳細過程,需要的朋友可以參考下
    2015-09-09
  • spring-boot整合dubbo:Spring-boot-dubbo-starter

    spring-boot整合dubbo:Spring-boot-dubbo-starter

    這篇文章主要介紹了spring-boot整合dubbo:Spring-boot-dubbo-starter的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05
  • java中的按位與(&)用法說明

    java中的按位與(&)用法說明

    這篇文章主要介紹了java中的按位與(&)用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • mybatis-plus主鍵策略生成失敗的解決

    mybatis-plus主鍵策略生成失敗的解決

    本文主要介紹了mybatis-plus主鍵策略生成失敗的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Java中final關(guān)鍵字的深入探究

    Java中final關(guān)鍵字的深入探究

    這篇文章主要給大家介紹了關(guān)于Java中final關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • java實現(xiàn)建造者模式(Builder Pattern)

    java實現(xiàn)建造者模式(Builder Pattern)

    這篇文章主要為大家詳細介紹了java實現(xiàn)建造者模式Builder Pattern,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • SpringBoot整合MyBatis實現(xiàn)CRUD操作項目實踐

    SpringBoot整合MyBatis實現(xiàn)CRUD操作項目實踐

    本文主要介紹了SpringBoot整合MyBatis實現(xiàn)CRUD操作項目實踐,如何實現(xiàn)數(shù)據(jù)庫的CRUD創(chuàng)建、讀取、更新、刪除操作,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論