当前位置:编程学习 > JAVA >>

设计模式学习-----组合模式

组合模式

   GOOD:整体和部分可以被一致对待(如WORD中复制一个文字、一段文字、一篇文章都是一样的操作)

 

[html] 
#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 
 
class Component 

public: 
    string m_strName; 
    Component(string strName) 
    { 
        m_strName = strName; 
    } 
    virtual void Add(Component* com)=0; 
    virtual void Display(int nDepth)=0; 
}; 
 
class Leaf : public Component 

public: 
    Leaf(string strName): Component(strName){} 
 
    virtual void Add(Component* com) 
    { 
        cout<<"leaf can't add"<<endl; 
    } 
 
    virtual void Display(int nDepth) 
    { 
        string strtemp; 
        for(int i=0; i < nDepth; i++) 
        { 
            strtemp+="-"; 
        } 
        strtemp += m_strName; 
        cout<<strtemp<<endl; 
    } 
}; 
 
class Composite : public Component 

private: 
    vector<Component*> m_component; 
public: 
    Composite(string strName) : Component(strName){} 
 
    virtual void Add(Component* com) 
    { 
        m_component.push_back(com); 
    } 
 
    virtual void Display(int nDepth) 
    { 
        string strtemp; 
        for(int i=0; i < nDepth; i++) 
        { 
            strtemp+="-"; 
        } 
        strtemp += m_strName; 
        cout<<strtemp<<endl; 
 
        vector<Component*>::iterator p=m_component.begin(); 
        while (p!=m_component.end()) 
        { 
            (*p)->Display(nDepth+2);  
            p++; 
        } 
    } 
 
}; 
 
//客户端 
int main() 

    Composite* p=new Composite("小王"); 
    p->Add(new Leaf("小李")); 
    p->Add(new Leaf("小赵")); 
 
    Composite* p1 = new Composite("小小五"); 
    p1->Add(new Leaf("大三")); 
 
    p->Add(p1); 
    p->Display(1); 
    return 0; 


[html] 
#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 
 
class Company 

protected: 
    string m_strName; 
public: 
    Company(string strName) 
    { 
        m_strName = strName; 
    } 
 
    virtual void Add(Company* c)=0; 
    virtual void Display(int nDepth)=0; 
    virtual void LineOfDuty()=0; 
}; 
 
class ConcreteCompany: public Company 

private: 
    vector<Company*> m_company; 
public: 
    ConcreteCompany(string strName):Company(strName){} 
 
    virtual void Add(Company* c) 
    { 
        m_company.push_back(c); 
    } 
    virtual void Display(int nDepth) 
    { 
        string strtemp; 
        for(int i=0; i < nDepth; i++) 
        { 
            strtemp += "-"; 
        } 
        strtemp +=m_strName; 
        cout<<strtemp<<endl; 
 
        vector<Company*>::iterator p=m_company.begin(); 
        while (p!=m_company.end()) 
        { 
            (*p)->Display(nDepth+2); 
            p++; 
        } 
    } 
    virtual void LineOfDuty() 
    { 
        vector<Company*>::iterator p=m_company.begin(); 
        while (p!=m_company.end()) 
        { 
            (*p)->LineOfDuty(); 
            p++; 
        } 
    } 
}; 
 
class HrDepartment : public Company 

public: 
 
    HrDepartment(string strname) : Company(strname){} 
 
    virtual void Display(int nDepth) 
    { 
        string strtemp; 
        for(int i = 0; i < nDepth; i++) 
        { 
            strtemp += "-"; 
        } 
 
        strtemp += m_s

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,