国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式之組合模式筆記

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式之組合模式筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

說明

記錄下學(xué)習(xí)設(shè)計(jì)模式-組合模式的寫法。JDK使用版本為1.8版本。

Composite(組合)

意圖:將對(duì)象組合成樹型結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。Composite使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。
結(jié)構(gòu):
設(shè)計(jì)模式之組合模式筆記

其中:

  • Component為組合中的對(duì)象聲明接口;在適當(dāng)情況下實(shí)現(xiàn)所有類共有接口的默認(rèn)行為;聲明一個(gè)接口用于訪問和管理Component的子組件;(可選)在遞歸結(jié)構(gòu)中定義一個(gè)接口,用于訪問一個(gè)父組件,并在合適的情況下實(shí)現(xiàn)它。
  • Leaf在組合中表示葉結(jié)點(diǎn)對(duì)象,葉結(jié)點(diǎn)沒有子結(jié)點(diǎn);在組合中定義圖元對(duì)象的行為。
  • Composite定義有子組件的那些組件的行為;存儲(chǔ)子組件;在Component接口中實(shí)現(xiàn) 與子組件有關(guān)的操作。
  • Client通過Component接口操縱組合組件的對(duì)象。

適用性:

  • 想表示對(duì)象的部分-整體層次結(jié)構(gòu)。
  • 希望用戶忽略組合對(duì)象與單個(gè)對(duì)象的不同,用戶將統(tǒng)一地使用組合結(jié)構(gòu)中的所有對(duì)象。

使用場(chǎng)景:
組合模式正是應(yīng)樹型結(jié)構(gòu)而生,所以組合模式的使用場(chǎng)景就是出現(xiàn)樹形結(jié)構(gòu)的地方。比如:文件目錄顯示,多級(jí)目錄呈現(xiàn)等樹形結(jié)構(gòu)數(shù)據(jù)的操作。

目錄

設(shè)計(jì)模式之組合模式筆記

組合模式示例類圖

設(shè)計(jì)模式之組合模式筆記
設(shè)計(jì)模式之組合模式筆記

以該UML類圖實(shí)現(xiàn)組合模式示例。

菜單組件抽象類

package com.example.deesign_patterns.composite;

//菜單組件類
public abstract class MenuComponent {

    //菜單組件的名稱
    protected String name;
    //菜單組件的層級(jí)
    protected int level;

    //添加子菜單
    public void add(MenuComponent menuComponent){
        throw new UnsupportedOperationException();
    }

    //移除子菜單
    public void remove(MenuComponent menuComponent){
        throw new UnsupportedOperationException();
    }

    //獲取指定的子菜單
    public MenuComponent getChild(int index){
        throw new UnsupportedOperationException();
    }

    //獲取菜單或者菜單項(xiàng)的名稱
    public String getName(){
        return name;
    }

    //打印菜單名稱的方法(包含子菜單和子菜單項(xiàng))
    public abstract void print();
}

菜單類

package com.example.deesign_patterns.composite;

import java.util.ArrayList;
import java.util.List;

//菜單類
public class Menu extends MenuComponent{

    //菜單可以有多個(gè)子菜單或者子菜單項(xiàng)
    private List<MenuComponent> menuComponentList=new ArrayList<MenuComponent>();

    //構(gòu)造方法
    public Menu(String name,int level) {
        this.name=name;
        this.level=level;
    }

    @Override
    public void add(MenuComponent menuComponent) {
        menuComponentList.add(menuComponent);
    }

    @Override
    public void remove(MenuComponent menuComponent) {
        menuComponentList.remove(menuComponent);
    }

    @Override
    public MenuComponent getChild(int index) {
        return menuComponentList.get(index);
    }

    @Override
    public void print() {
        //打印菜單名稱
        for(int i=0;i<level;i++){
            System.out.print("--");
        }
        System.out.println(name);
        //打印子菜單或者子菜單項(xiàng)名稱
        for(MenuComponent component:menuComponentList){
            component.print();
        }
    }
}

菜單項(xiàng)類

package com.example.deesign_patterns.composite;

//菜單項(xiàng)類
public class MenuItem extends MenuComponent{

    //構(gòu)造方法
    public MenuItem(String name,int level) {
        this.name=name;
        this.level=level;
    }

    @Override
    public void print() {
        //打印菜單項(xiàng)的名稱
        for(int i=0;i<level;i++){
            System.out.print("--");
        }
        System.out.println(name);
    }
}

測(cè)試類

package com.example.deesign_patterns.composite;

//測(cè)試類
public class Client {

    public static void main(String[] args) {
        //創(chuàng)建菜單樹
        MenuComponent menu1=new Menu("菜單管理",2);
        menu1.add(new MenuItem("頁面訪問",3));
        menu1.add(new MenuItem("展開菜單",3));
        menu1.add(new MenuItem("編輯菜單",3));
        menu1.add(new MenuItem("刪除菜單",3));
        menu1.add(new MenuItem("新增菜單",3));

        MenuComponent menu2=new Menu("權(quán)限配置",2);
        menu2.add(new MenuItem("頁面訪問",3));
        menu2.add(new MenuItem("提交保存",3));

        MenuComponent menu3=new Menu("角色管理",2);
        menu3.add(new MenuItem("頁面訪問",3));
        menu3.add(new MenuItem("新增角色",3));
        menu3.add(new MenuItem("修改角色",3));

        //創(chuàng)建一級(jí)菜單
        MenuComponent component=new Menu("系統(tǒng)管理",1);
        //將二級(jí)菜單添加到一級(jí)菜單
        component.add(menu1);
        component.add(menu2);
        component.add(menu3);

        //打印菜單名稱(如果有子菜單一塊打印)
        component.print();
    }
}

設(shè)計(jì)模式之組合模式筆記

好處:文章來源地址http://www.zghlxwxcb.cn/news/detail-501163.html

  • 組合模式可以清楚地定義分層次的復(fù)雜對(duì)象,表示對(duì)象的全部或部分層次,它讓客戶端忽略了層次的差異,方便對(duì)整個(gè)層次結(jié)構(gòu)進(jìn)行控制。
  • 客戶端可以一致地使用一個(gè)組合結(jié)構(gòu)或其中單個(gè)對(duì)象,不必關(guān)心處理的是單個(gè)對(duì)象還是整個(gè)組合對(duì)象,簡(jiǎn)化了客戶端代碼。
  • 在組合模式中增加新的樹枝節(jié)點(diǎn)和葉子節(jié)點(diǎn)都很方便,無須對(duì)現(xiàn)有類庫(kù)進(jìn)行任何修改,符合開閉原則。
  • 組合模式為樹形結(jié)構(gòu)的面向?qū)ο髮?shí)現(xiàn)提供了一種靈活的解決方案,通過葉子節(jié)點(diǎn)和樹枝節(jié)點(diǎn)的遞歸組合,可以形成復(fù)雜的樹形結(jié)構(gòu),但對(duì)樹形結(jié)構(gòu)的控制卻非常簡(jiǎn)單。

到了這里,關(guān)于設(shè)計(jì)模式之組合模式筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 學(xué)習(xí)筆記-設(shè)計(jì)模式-創(chuàng)建型模式-單例模式

    一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問此實(shí)例的點(diǎn),哪怕多線程同時(shí)訪問。 單例模式主要解決了 一個(gè)全局使用的類被頻繁的創(chuàng)建和消費(fèi) 的問題。 單例模式的案例場(chǎng)景 數(shù)據(jù)庫(kù)的連接池不會(huì)反復(fù)創(chuàng)建 spring中一個(gè)單例模式bean的生成和使用 在我們平常的代碼中需要設(shè)置全局

    2024年02月08日
    瀏覽(18)
  • 設(shè)計(jì)模式——組合模式08

    設(shè)計(jì)模式——組合模式08

    組合模式:把類似對(duì)象或方法組合成結(jié)構(gòu)為樹狀的設(shè)計(jì)思路。 例如部門之間的關(guān)系。 設(shè)計(jì)模式,一定要敲代碼理解 滿足開閉原則。葉子結(jié)點(diǎn)與非葉子結(jié)點(diǎn)都繼承或?qū)崿F(xiàn)同一抽象,只是葉子功能權(quán)限少,而非葉子結(jié)點(diǎn)需要容器記錄子節(jié)點(diǎn)。 代碼下載

    2024年04月11日
    瀏覽(27)
  • 設(shè)計(jì)模式——組合模式

    設(shè)計(jì)模式——組合模式

    組合模式(Composite Pattern):組合多個(gè)對(duì)象形成樹形結(jié)構(gòu)以表示具有“整體—部分”關(guān)系的層次結(jié)構(gòu)。組合模式對(duì)單個(gè)對(duì)象(即葉子對(duì)象)和組合對(duì)象(即容器對(duì)象)的使用具有一致性,組合模式又可以稱為“整體—部分”(Part-Whole)模式,它是一種對(duì)象結(jié)構(gòu)型模式。 組合模式將

    2024年02月11日
    瀏覽(33)
  • 設(shè)計(jì)模式-組合模式

    設(shè)計(jì)模式-組合模式

    組合模式可以使用一棵樹來表示 組合模式使得用戶可以使用一致的方法操作單個(gè)對(duì)象和組合對(duì)象 組合模式又叫部分整體模式,將對(duì)象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),可以更好的實(shí)現(xiàn)管理操作,部分-整體對(duì)象的操作基本一樣,但是應(yīng)該還會(huì)有不一樣的地方

    2024年02月10日
    瀏覽(26)
  • 設(shè)計(jì)模式:組合模式

    組合模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,用于將對(duì)象組織成樹形結(jié)構(gòu),以表示“部分-整體”的層次結(jié)構(gòu)。組合模式使得客戶端可以統(tǒng)一地處理單個(gè)對(duì)象和組合對(duì)象,而不需要區(qū)分它們之間的差異。 在組合模式中,有兩種主要類型的對(duì)象:葉節(jié)點(diǎn)和組合節(jié)點(diǎn)。葉節(jié)點(diǎn)表示樹結(jié)構(gòu)中的

    2024年02月07日
    瀏覽(24)
  • 設(shè)計(jì)模式--組合模式

    設(shè)計(jì)模式--組合模式

    某日,小明公司最近接到一個(gè)辦公管理系統(tǒng)的項(xiàng)目,并且在每個(gè)城市都有分部。這屬于是很常見的OA系統(tǒng),只要前期將需求分析完善好,中后期開發(fā)維護(hù)是不難的。 然而,總部公司使用后覺得很OK,想要其他城市的分公司也執(zhí)行使用。但是現(xiàn)在的問題是,其他分公司的部門和

    2024年01月21日
    瀏覽(27)
  • 設(shè)計(jì)模式——10. 組合模式

    組合模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,用于將對(duì)象組合成樹狀結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。它允許客戶端以一致的方式處理單個(gè)對(duì)象和組合對(duì)象(包含多個(gè)對(duì)象的容器),使得客戶端無需關(guān)心它們之間的差異。 組合模式通常涉及兩種主要角色: 葉子節(jié)點(diǎn)(Leaf):這是組

    2024年02月07日
    瀏覽(19)
  • 結(jié)構(gòu)型設(shè)計(jì)模式之組合模式【設(shè)計(jì)模式系列】

    結(jié)構(gòu)型設(shè)計(jì)模式之組合模式【設(shè)計(jì)模式系列】

    C++技能系列 Linux通信架構(gòu)系列 C++高性能優(yōu)化編程系列 深入理解軟件架構(gòu)設(shè)計(jì)系列 高級(jí)C++并發(fā)線程編程 設(shè)計(jì)模式系列 期待你的關(guān)注哦?。?! 現(xiàn)在的一切都是為將來的夢(mèng)想編織翅膀,讓夢(mèng)想在現(xiàn)實(shí)中展翅高飛。 Now everything is for the future of dream weaving wings, let the dream fly in reali

    2024年02月15日
    瀏覽(24)
  • 設(shè)計(jì)模式淺析(十) ·設(shè)計(jì)模式之迭代器&組合模式

    設(shè)計(jì)模式淺析(十) ·設(shè)計(jì)模式之迭代器&組合模式

    日常叨逼叨 java設(shè)計(jì)模式淺析,如果覺得對(duì)你有幫助,記得一鍵三連,謝謝各位觀眾老爺???? 案例 有兩家門店,門店A呢只提供早餐,門店B呢只提供午餐,有一天這兩家店鋪想要進(jìn)行合并,一起做大做強(qiáng),再創(chuàng)輝煌。 合并后呢,對(duì)于菜單的定制存在了一定的問題: 門店A的

    2024年04月11日
    瀏覽(26)
  • 設(shè)計(jì)模式學(xué)習(xí)筆記

    把對(duì)象的創(chuàng)建和使用相分離 定義工廠接口和產(chǎn)品接口,但如何創(chuàng)建實(shí)際工廠和實(shí)際產(chǎn)品被推遲到子類實(shí)現(xiàn),從而使調(diào)用方只和抽象工廠與抽象產(chǎn)品打交道 調(diào)用方盡量持有接口或抽象類,避免持有具體類型的子類,以便工廠方法能隨時(shí)切換不同的子類返回,卻不影響調(diào)用方代

    2024年02月19日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包