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

來吧,朋友!

為C++瘋狂

設計模式解析和實現(C++) Composite模式

作用:

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

    UML結構圖:



    抽象基類:

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

    接口函數:

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

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

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

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

    解析:

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

實現:

    1)Composite.h

 /**//********************************************************************
    created:    2006/07/20
    filename:     Composite.h
    author:        李創
                http://m.shnenglu.com/converse/

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

#ifndef COMPOSITE_H
#define COMPOSITE_H

#include <list>

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

    // 純虛函數,只提供接口,沒有默認的實現
    virtual void Operation() = 0;

    // 虛函數,提供接口,有默認的實現就是什么都不做
    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:        李創
                http://m.shnenglu.com/converse/

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

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

/**//*-------------------------------------------------------------------
    Component成員函數的實現

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

}

void Component::Remove(Component* pChild)
{

}

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

/**//*-------------------------------------------------------------------
    Leaf成員函數的實現

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

/**//*-------------------------------------------------------------------
    Composite成員函數的實現

-------------------------------------------------------------------*/
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:        李創
                http://m.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 閱讀(386) 評論(0)  編輯 收藏 引用 所屬分類: C++開發工具

導航

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統計

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章檔案

收藏夾

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>
            国内精品久久久久国产盗摄免费观看完整版 | 久久久噜噜噜久噜久久| 欧美视频免费在线| 国产精品美女久久久久久2018| 亚洲美洲欧洲综合国产一区| 欧美激情网友自拍| 欧美日韩性视频在线| 亚洲在线视频| 狼人社综合社区| 亚洲视频网在线直播| 欧美一区二区三区日韩| 在线播放一区| 亚洲视频国产视频| 国语自产精品视频在线看| 亚洲狠狠丁香婷婷综合久久久| 欧美成人亚洲成人| 欧美在线视频观看| 欧美日韩一区二| 嫩草成人www欧美| 国产欧美在线播放| 日韩视频一区二区三区| 亚洲高清一二三区| 久久激情五月丁香伊人| 午夜视频一区| 欧美性感一类影片在线播放 | 91久久精品久久国产性色也91 | 浪潮色综合久久天堂| 国产精品久久久久永久免费观看 | 亚洲午夜免费视频| 日韩亚洲欧美中文三级| 女同一区二区| 亚洲风情亚aⅴ在线发布| 国内精品久久久久影院色| 午夜精品久久久久久久| 欧美一区二区日韩一区二区| 欧美视频中文字幕在线| 中国成人黄色视屏| 篠田优中文在线播放第一区| 国产精品久久999| 9久草视频在线视频精品| 亚洲视频综合| 国产欧美短视频| 久久av老司机精品网站导航| 久久噜噜噜精品国产亚洲综合| 国产一区二区三区视频在线观看| 欧美一区视频在线| 欧美国产日韩一区二区三区| 亚洲视频图片小说| 国色天香一区二区| 欧美日本韩国一区| 欧美一区二区在线免费播放| 欧美大片在线观看一区| 亚洲欧美成人精品| **网站欧美大片在线观看| 欧美区在线观看| 午夜精品一区二区在线观看 | 欧美日韩天堂| 一级成人国产| 欧美韩日一区| 久久久久久久一区二区三区| 99国产精品99久久久久久粉嫩| 国产精品久久久久久久久久免费| 久久久久国产精品一区二区| 亚洲乱码国产乱码精品精98午夜| 久久免费精品日本久久中文字幕| 日韩午夜精品视频| 亚洲精品美女在线观看| 伊人成人在线视频| 韩国自拍一区| 在线国产亚洲欧美| 亚洲激情电影在线| 在线观看91精品国产入口| 国产日韩亚洲欧美| 国产一区二区主播在线| 含羞草久久爱69一区| 韩日欧美一区二区| 在线观看三级视频欧美| 1000部精品久久久久久久久| 亚洲国产福利在线| 在线午夜精品| 午夜一级久久| 欧美国内亚洲| 一本色道久久综合狠狠躁篇的优点| 日韩亚洲欧美高清| 午夜视频在线观看一区二区| 久久九九精品| 久久精品动漫| 欧美激情性爽国产精品17p| 欧美国产日本在线| 亚洲天天影视| 另类激情亚洲| 国产视频亚洲精品| 亚洲人成网在线播放| 性亚洲最疯狂xxxx高清| 亚洲成在人线av| 午夜日韩在线观看| 老鸭窝亚洲一区二区三区| 亚洲日韩欧美视频一区| 欧美永久精品| 国产欧美日韩激情| 中文在线不卡| 99在线|亚洲一区二区| 久久一本综合频道| 极品少妇一区二区三区精品视频| 亚洲视频免费看| 99热在这里有精品免费| 欧美成人国产一区二区| 亚洲欧洲免费视频| 久久夜色精品一区| 久久精品国产一区二区三| 国产精品一区二区三区久久久| 在线视频你懂得一区| 亚洲免费黄色| 国产精品久久久99| 久久国产欧美日韩精品| 香蕉成人啪国产精品视频综合网| 国产精品嫩草影院av蜜臀| 亚洲欧美色婷婷| 销魂美女一区二区三区视频在线| 国产精品人人爽人人做我的可爱| 亚洲欧美国产高清| 久久久久久穴| 亚洲精品国产精品国自产观看| 亚洲开发第一视频在线播放| 国产精品xxxav免费视频| 欧美一区二区大片| 免费看精品久久片| 午夜精品理论片| 可以免费看不卡的av网站| 亚洲少妇在线| 久久久久亚洲综合| 亚洲欧美激情在线视频| 美女被久久久| 久久久综合网| 国产精品久久网| 欧美高清在线视频观看不卡| 欧美精品激情| 亚洲国产99| 亚洲人午夜精品| 亚洲成人影音| 欧美一区二区在线播放| 午夜精品偷拍| 欧美理论电影在线观看| 欧美freesex8一10精品| 国产精品夜色7777狼人 | 日韩午夜在线| 久久免费国产精品| 久久久综合精品| 激情文学一区| 久久伊人免费视频| 欧美国产丝袜视频| 亚洲日本欧美天堂| 欧美日韩免费观看一区二区三区| 亚洲第一在线综合网站| 亚洲激情国产| 国产精品www网站| 欧美一级视频免费在线观看| 久久久久在线观看| 亚洲人成艺术| 欧美性色综合| 久久久久高清| 亚洲理论在线观看| 久久激五月天综合精品| 激情小说另类小说亚洲欧美| 免费看亚洲片| 午夜亚洲性色视频| 欧美国产精品中文字幕| 亚洲婷婷综合色高清在线| 国产免费成人av| 欧美另类在线播放| 久久大综合网| 99re亚洲国产精品| 欧美大胆人体视频| 欧美一区二区视频观看视频| 亚洲国内精品在线| 国产欧美日韩在线播放| 欧美日韩影院| 欧美v日韩v国产v| 久久久国产成人精品| 亚洲一区视频在线观看视频| 欧美高清视频一区二区三区在线观看| 亚洲淫性视频| 一本色道久久综合| 一本色道久久综合亚洲精品不卡| 国产综合一区二区| 国内精品模特av私拍在线观看| 国产精品豆花视频| 国产精品美女久久久久久2018| 欧美日韩免费观看中文| 欧美黄网免费在线观看| 欧美精品一区二| 欧美全黄视频| 欧美日韩亚洲视频一区| 国产精品国产成人国产三级| 欧美性感一类影片在线播放| 国产精品美女在线| 国产一区视频网站| 亚洲伦理在线| 欧美一区二区视频免费观看| 久久免费视频一区|