青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

來吧,朋友!

為C++瘋狂

設(shè)計模式解析和實現(xiàn)(C++) Composite模式

作用:

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

    UML結(jié)構(gòu)圖:



    抽象基類:

    1)Component:為組合中的對象聲明接口,聲明了類共有接口的缺省行為(如這里的Add,Remove,GetChild函數(shù)),聲明一個接口函數(shù)可以訪問Component的子組件。

    接口函數(shù):

    1)Component::Operatation:定義了各個組件共有的行為接口,由各個組件的具體實現(xiàn)。

    2)Component::Add添加一個子組件

    3)Component::Remove::刪除一個子組件。

    4)Component::GetChild:獲得子組件的指針。

    解析:

    Component模式是為解決組件之間的遞歸組合提供了解決的辦法,它主要分為兩個派生類,其中的Leaf是葉子結(jié)點,也就是不含有子組件的結(jié)點,而Composite是含有子組件的類。舉一個例子來說明這個模式,在UI的設(shè)計中,最基本的控件是諸如Button,Edit這樣的控件,相當(dāng)于是這里的Leaf組件,而比較復(fù)雜的控件比如List則可也看做是由這些基本的組件組合起來的控件,相當(dāng)于這里的Composite,它們之間有一些行為含義是相同的,比如在控件上作一個點擊,移動操作等等的,這些都可以定義為抽象基類中的接口虛函數(shù),由各個派生類去實現(xiàn)之,這些都會有的行為就是這里的Operation函數(shù),而添加,刪除等進行組件組合的操作只有非葉子結(jié)點才可能有,所以虛擬基類中只是提供接口而且默認(rèn)的實現(xiàn)是什么都不做。

實現(xiàn):

    1)Composite.h

 /**//********************************************************************
    created:    2006/07/20
    filename:     Composite.h
    author:        李創(chuàng)
                http://www.shnenglu.com/converse/

    purpose:    Composite模式的演示代碼
*********************************************************************/

#ifndef COMPOSITE_H
#define COMPOSITE_H

#include <list>

// 組合中的抽象基類
class Component
{
public:
    Component(){}
    virtual ~Component(){}

    // 純虛函數(shù),只提供接口,沒有默認(rèn)的實現(xiàn)
    virtual void Operation() = 0;

    // 虛函數(shù),提供接口,有默認(rèn)的實現(xiàn)就是什么都不做
    virtual void Add(Component* pChild);
    virtual void Remove(Component* pChild);
    virtual Component* GetChild(int nIndex);
};

// 派生自Component,是其中的葉子組件的基類
class Leaf
    : public Component
{
public:
    Leaf(){}
    virtual ~Leaf(){}

    virtual void Operation();
};

// 派生自Component,是其中的含有子件的組件的基類
class Composite
    : public Component
{
public:
    Composite(){}
    virtual ~Composite();

    virtual void Operation();

    virtual void Add(Component* pChild);
    virtual void Remove(Component* pChild);
    virtual Component* GetChild(int nIndex);

private:
    // 采用list容器去保存子組件
    std::list<Component*>    m_ListOfComponent;
};

#endif

2)Composite.cpp

 /**//********************************************************************
    created:    2006/07/20
    filename:     Composite.cpp
    author:        李創(chuàng)
                http://www.shnenglu.com/converse/

    purpose:    Composite模式的演示代碼
*********************************************************************/

#include "Composite.h"
#include <iostream>
#include <algorithm>

/**//*-------------------------------------------------------------------
    Component成員函數(shù)的實現(xiàn)

 -------------------------------------------------------------------*/
void Component::Add(Component* pChild)
{

}

void Component::Remove(Component* pChild)
{

}

Component* Component::GetChild(int nIndex)
{
    return NULL;
}

/**//*-------------------------------------------------------------------
    Leaf成員函數(shù)的實現(xiàn)

-------------------------------------------------------------------*/
void Leaf::Operation()
{
    std::cout << "Operation by leafn";
}

/**//*-------------------------------------------------------------------
    Composite成員函數(shù)的實現(xiàn)

-------------------------------------------------------------------*/
Composite::~Composite()
{
    std::list<Component*>::iterator iter1, iter2, temp;

    for (iter1  = m_ListOfComponent.begin(), iter2 = m_ListOfComponent.end();
         iter1 != iter2;
         )
    {
        temp = iter1;
        ++iter1;
        delete (*temp);
    }
}

void Composite::Add(Component* pChild)
{
    m_ListOfComponent.push_back(pChild);
}

void Composite::Remove(Component* pChild)
{
    std::list<Component*>::iterator iter;

    iter = find(m_ListOfComponent.begin(), m_ListOfComponent.end(), pChild);

    if (m_ListOfComponent.end() != iter)
    {
        m_ListOfComponent.erase(iter);
    }
}

Component* Composite::GetChild(int nIndex)
{
    if (nIndex <= 0 || nIndex > m_ListOfComponent.size())
        return NULL;

    std::list<Component*>::iterator iter1, iter2;
    int i;
    for (i = 1, iter1  = m_ListOfComponent.begin(), iter2 = m_ListOfComponent.end();
        iter1 != iter2;
        ++iter1, ++i)
    {
        if (i == nIndex)
            break;
    }

    return *iter1;
}

void Composite::Operation()
{
    std::cout << "Operation by Compositen";

    std::list<Component*>::iterator iter1, iter2;

    for (iter1  = m_ListOfComponent.begin(), iter2 = m_ListOfComponent.end();
        iter1 != iter2;
        ++iter1)
    {
        (*iter1)->Operation();
    }
}

3)Main.cpp

 /**//********************************************************************
    created:    2006/07/20
    filename:     Main.cpp
    author:        李創(chuàng)
                http://www.shnenglu.com/converse/

    purpose:    Composite模式的測試代碼
*********************************************************************/

#include "Composite.h"
#include <stdlib.h>

int main()
{
    Leaf *pLeaf1 = new Leaf();
    Leaf *pLeaf2 = new Leaf();

    Composite* pComposite = new Composite;
    pComposite->Add(pLeaf1);
    pComposite->Add(pLeaf2);
    pComposite->Operation();
    pComposite->GetChild(2)->Operation();

    delete pComposite;

    system("pause");

    return 0;
}

posted on 2009-07-20 17:14 yanghaibao 閱讀(394) 評論(0)  編輯 收藏 引用 所屬分類: C++開發(fā)工具

導(dǎo)航

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

統(tǒng)計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章檔案

收藏夾

Good blogs

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            **欧美日韩vr在线| 亚洲性图久久| 麻豆国产精品777777在线| 久久成人资源| 在线国产精品一区| 亚洲国产天堂久久国产91| 欧美成人情趣视频| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美在线观看视频| 好吊色欧美一区二区三区视频| 久久婷婷久久| 欧美激情va永久在线播放| 亚洲无玛一区| 欧美一区二区三区的| 在线不卡中文字幕| 日韩写真视频在线观看| 国产精品永久免费视频| 免费在线观看精品| 欧美日韩免费在线观看| 久久精品久久综合| 欧美成人亚洲成人日韩成人| 亚洲一区二区三区影院| 久久久久免费| 中文在线资源观看视频网站免费不卡| 亚洲视频免费观看| 亚洲国产成人久久| 亚洲午夜精品久久久久久app| 国内精品美女av在线播放| 亚洲二区视频在线| 国产精品一区二区三区乱码| 欧美插天视频在线播放| 欧美特黄视频| 欧美.com| 国产视频一区三区| 亚洲精品国产拍免费91在线| 国产一区视频在线观看免费| 亚洲精品女人| 国产精品日韩欧美一区二区| 亚洲国产精品精华液2区45| 国产一区二区三区在线观看免费视频| 亚洲国产婷婷| 影音先锋国产精品| 亚洲性av在线| 亚洲午夜久久久久久久久电影院| 久久久久国色av免费观看性色| 亚洲专区国产精品| 久久中文久久字幕| 久久久免费精品| 国产欧美日韩在线播放| 一区二区三区色| 一个色综合导航| 女女同性女同一区二区三区91| 久久人人爽爽爽人久久久| 国产精品青草久久| 一本久久a久久精品亚洲| 91久久国产自产拍夜夜嗨| 久久天堂av综合合色| 久久青草欧美一区二区三区| 国产精品久久久久久久久免费| 亚洲精品日韩在线观看| 亚洲欧洲日产国产网站| 免费视频一区二区三区在线观看| 久久久久久国产精品mv| 国产午夜亚洲精品羞羞网站| 亚洲欧美在线高清| 香蕉成人伊视频在线观看| 国产精品久久久久久久久久久久久 | 精品1区2区3区4区| 久久精品国产第一区二区三区最新章节 | 欧美女主播在线| 亚洲国产人成综合网站| 亚洲靠逼com| 欧美精品一区视频| 日韩一级不卡| 亚洲免费视频网站| 国产精品乱人伦中文| 亚洲男同1069视频| 久久人人爽人人爽爽久久| 精品动漫一区| 欧美成人a视频| 亚洲日本中文| 校园春色国产精品| 精品1区2区| 欧美大片va欧美在线播放| 亚洲美女啪啪| 午夜久久资源| 一色屋精品视频免费看| 欧美国产日韩二区| 亚洲午夜羞羞片| 久久久蜜桃一区二区人| 91久久久一线二线三线品牌| 欧美另类视频| 午夜精品久久久久久久久| 免费观看国产成人| 一本色道久久综合狠狠躁的推荐| 国产精品每日更新| 久久亚洲综合色一区二区三区| 亚洲精品1区2区| 久久不见久久见免费视频1| 亚洲国产美女久久久久| 国产精品久久久久77777| 久久人人爽国产| 一本综合久久| 欧美+日本+国产+在线a∨观看| 一本久道久久综合中文字幕 | 欧美在线一级va免费观看| 欧美高清视频一区二区| 亚洲欧美经典视频| 亚洲国产成人久久综合| 国产精品一区二区在线观看| 欧美大片免费看| 欧美在线观看日本一区| 99re66热这里只有精品4| 久久天天躁夜夜躁狠狠躁2022 | 亚洲三级影院| 国产日韩在线不卡| 欧美日韩第一页| 久久综合色影院| 亚洲欧美另类综合偷拍| 亚洲欧洲日产国产网站| 欧美成人精品1314www| 欧美一区网站| 性欧美大战久久久久久久免费观看| 亚洲精品日韩在线观看| 精品成人在线观看| 国产欧美精品在线播放| 欧美视频免费在线| 奶水喷射视频一区| 久久久久免费观看| 欧美在线观看视频一区二区三区| 99精品视频免费观看视频| 欧美激情一区二区三区不卡| 久久久伊人欧美| 久久不射中文字幕| 欧美一区不卡| 欧美一级播放| 欧美一区激情视频在线观看| 亚洲欧美福利一区二区| 亚洲影视中文字幕| 一本色道久久综合| 夜色激情一区二区| 日韩一区二区免费看| 亚洲每日在线| 洋洋av久久久久久久一区| 亚洲毛片视频| 一本久久综合亚洲鲁鲁| 一区二区三区免费看| 一区二区三区鲁丝不卡| 亚洲淫性视频| 亚欧成人在线| 久久天堂成人| 欧美国产日韩一区二区在线观看| 欧美1区免费| 亚洲欧洲精品天堂一级| 亚洲精品综合精品自拍| 夜夜嗨av一区二区三区四季av| 日韩亚洲国产精品| 亚洲免费在线精品一区| 欧美在线亚洲在线| 噜噜噜躁狠狠躁狠狠精品视频| 欧美sm视频| 欧美日韩在线播放三区四区| 国产精品久久久久久久免费软件 | 欧美日韩性视频在线| 国产精品成人一区二区艾草| 国产精品永久| 亚洲成人在线免费| 99视频日韩| 久久av一区二区三区漫画| 免费视频最近日韩| 亚洲最快最全在线视频| 午夜精品福利在线| 免费av成人在线| 国产精品初高中精品久久| 国内外成人在线| 日韩亚洲欧美在线观看| 欧美一区二区在线免费播放| 美女国产一区| 在线综合亚洲| 久热精品视频在线| 国产精品久久久99| 亚洲第一偷拍| 欧美亚洲免费电影| 亚洲成人在线视频网站| 亚洲欧美大片| 欧美电影免费网站| 国产午夜精品理论片a级探花| 亚洲欧洲一区二区天堂久久| 午夜精品一区二区在线观看| 欧美高清视频一区| 午夜精品久久久久久久久久久久久 | 久久综合久久久久88| 欧美视频免费| 亚洲黄色成人| 久久精品国产欧美激情| 亚洲精品小视频在线观看| 久久久噜噜噜久久中文字免| 国产精品白丝av嫩草影院| 亚洲欧洲日本国产| 久久在线精品|