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

19.組合模式(Composite)

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

意圖:將對象組成樹狀結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得Client對單個(gè)對象和組合對象的使用具有一致性。

上下文:在樹型結(jié)構(gòu)的問題中,Client必須以不同的方式處理單個(gè)對象和組合對象。能否提供一種封裝,統(tǒng)一簡單元素和復(fù)雜元素的概念,讓對象容器自己來實(shí)現(xiàn)自身的復(fù)雜結(jié)構(gòu),讓Client可以像處理簡單元素一樣來處理復(fù)雜元素,從而使Client與復(fù)雜元素的內(nèi)部結(jié)構(gòu)解耦?

UML

19.組合模式(Composite),設(shè)計(jì)模式,組合模式

Component:為Composite中的對象聲明接口;在適當(dāng)情況下,實(shí)現(xiàn)所有類公共接口的默認(rèn)行為;聲明一個(gè)接口,用于訪問和管理Component的子部件;在遞歸結(jié)構(gòu)中定義一個(gè)接口,用于訪問一個(gè)父部件,并在適當(dāng)?shù)那闆r下實(shí)現(xiàn)它。
Leaf:在Composite中表示葉子對象。
Composite:存儲子部件,并定義有子部件的那些部件的行為。
Client:通過Component接口操作Composite的對象。

19.組合模式(Composite),設(shè)計(jì)模式,組合模式文章來源地址http://www.zghlxwxcb.cn/news/detail-731304.html

代碼:

#include <iostream>
#include <list>
using namespace std;
 
class Component
{
public:
    string name;
    Component(string name):name(name){
 
    }
    virtual void add(Component *c) = 0;
    virtual void remove(Component *c) = 0;
    virtual void display(int depth) = 0;
};
 
class Leaf:public Component
{
public:
    // Component interface
    Leaf(string name):Component(name){
 
    }
public:
    void add(Component *c);
    void remove(Component *c);
    void display(int depth);
};
 
void Leaf::add(Component *c )
{
    (void)(c);//消除警告
    cout << "不能向葉子中添加Component" << endl;
}
 
void Leaf::remove(Component *c)
{
    (void)(c);//Warning
    cout << "不能從葉子中刪除Component" << endl;
}
 
void Leaf::display(int depth)
{
    cout << string(depth,'-') << this->name << endl;
}
 
class Composite:public Component
{
public:
    list<Component*> children;
    // Component interface
    Composite(string name):Component(name){
 
    }
public:
    void add(Component *c);
    void remove(Component *c);
    void display(int depth);
};
void Composite::add(Component *c)
{
    children.push_back(c);
}
 
void Composite::remove(Component *c)
{
    children.remove(c);
}
 
void Composite::display(int depth)
{
    cout << string(depth,'-') << this->name << endl;
    list<Component*>::iterator it;
    for(it = children.begin();it != children.end();it++){
        Component *c = *it;
        c->display(depth + 2);
    }
}
int main()
{
    Composite *root = new Composite("樹干");
    root->add(new Leaf("樹葉1"));
    root->add(new Leaf("樹葉2"));
 
    Composite *c1 = new Composite("樹枝1");
    c1->add(new Leaf("樹葉1-1"));
    c1->add(new Leaf("樹葉1-2"));
    root->add(c1);
 
    Composite *c1_1 = new Composite("樹枝1-1");
    c1_1->add(new Leaf("樹葉1-1-1"));
    c1_1->add(new Leaf("樹葉1-1-2"));
    c1->add(c1_1);
    root->add(new Leaf("樹葉3"));
    root->display(1);
 
    return 0;
}

結(jié)果

-樹干
---樹葉1
---樹葉2
---樹枝1
-----樹葉1-1
-----樹葉1-2
-----樹枝1-1
-------樹葉1-1-1
-------樹葉1-1-2
---樹葉3

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

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

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

相關(guān)文章

  • Java設(shè)計(jì)模式—組合模式(Composite Pattern)

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

    ????????組合模式(Composite),將對象組合成樹形結(jié)構(gòu)以表示\\\'部分-整體\\\'的層次結(jié)構(gòu)。組合模式使得用戶對單個(gè)對象和組合對象的使用具有一致性。 MenuComponent ?抽象類:定義了菜單組件的基本行為,包括打印名稱和管理子元素的方法。 Menu ?類:表示菜單,可以包含其他

    2024年04月15日
    瀏覽(42)
  • 【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——組合模式Composite(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——組合模式Composite(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    編寫程序展示一個(gè)學(xué)校院系結(jié)構(gòu): 需求是這樣,要在一個(gè)頁面中展示出學(xué)校的院系組成,一個(gè)學(xué)校有多個(gè)學(xué)院,一個(gè)學(xué)院有多個(gè)系 【傳統(tǒng)方式】 將學(xué)院看做是學(xué)校的子類,系是學(xué)院的子類,小的組織繼承大的組織 分析: 在一個(gè)頁面中展示出學(xué)校的院系組成,一個(gè)學(xué)校有多個(gè)

    2024年02月15日
    瀏覽(32)
  • 19.組合模式(Composite)

    19.組合模式(Composite)

    意圖:將對象組成樹狀結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu),使得Client對單個(gè)對象和組合對象的使用具有一致性。 上下文:在樹型結(jié)構(gòu)的問題中,Client必須以不同的方式處理單個(gè)對象和組合對象。能否提供一種封裝,統(tǒng)一簡單元素和復(fù)雜元素的概念,讓對象容器自己來實(shí)現(xiàn)

    2024年02月07日
    瀏覽(15)
  • 組合模式(Composite)

    組合模式(Composite?Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,用于表示對象的部分-整體層次結(jié)構(gòu)。它允許客戶統(tǒng)一對待個(gè)別對象和組合對象。這種模式特別適用于處理樹形結(jié)構(gòu)的數(shù)據(jù)。 在Java中,組合模式通常涉及以下幾個(gè)部分: 組件(Component): 為組合中的對象聲明接口,在適當(dāng)

    2024年02月04日
    瀏覽(13)
  • 設(shè)計(jì)模式(19)命令模式

    設(shè)計(jì)模式(19)命令模式

    一、介紹: 1、定義:命令模式(Command Pattern)是一種行為設(shè)計(jì)模式,它將請求封裝為一個(gè)對象,從而使你可以使用不同的請求對客戶端進(jìn)行參數(shù)化。命令模式還支持請求的排隊(duì)、記錄日志、撤銷操作等功能。 2、組成結(jié)構(gòu): (1)命令接口(Command):定義執(zhí)行命令的方法,可

    2024年02月07日
    瀏覽(14)
  • 設(shè)計(jì)模式——10. 組合模式

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

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

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

    組合模式:把類似對象或方法組合成結(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è)對象形成樹形結(jié)構(gòu)以表示具有“整體—部分”關(guān)系的層次結(jié)構(gòu)。組合模式對單個(gè)對象(即葉子對象)和組合對象(即容器對象)的使用具有一致性,組合模式又可以稱為“整體—部分”(Part-Whole)模式,它是一種對象結(jié)構(gòu)型模式。 組合模式將

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

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

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包