• <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>
            posts - 183,  comments - 10,  trackbacks - 0
            來自于《大話設(shè)計(jì)模式》
            組合模式(Composite):將對(duì)象組合成樹形結(jié)構(gòu)以表示‘部分-整體’的層次結(jié)構(gòu)。組合模式使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的使用具有一致性。

            UML 類圖:


            代碼實(shí)現(xiàn) C++:
              1 #include <iostream>
              2 #include <string>
              3 #include <list>
              4 #include <algorithm>
              5 using namespace std;
              6 
              7 class Company
              8 {
              9 protected:
             10     string name;
             11 public:
             12     Company(const string& s) : name(s) {}
             13     virtual void Add(Company* c) = 0;
             14     virtual void Remove(Company* c) = 0;
             15     virtual void Display(int depth) = 0;
             16     virtual void LineOfDuty() = 0;
             17 };
             18 
             19 class ConcreteCompany : public Company
             20 {
             21 private:
             22     list<Company*> children;
             23 public:
             24     ConcreteCompany(const string& s) : Company(s) {}
             25     virtual void Add(Company* c)
             26     {
             27         children.push_back(c);
             28     }
             29     virtual void Remove(Company* c)
             30     {
             31         list<Company*>::iterator iter = find(children.begin(), children.end(), c);
             32         if (iter != children.end())
             33         {
             34             children.erase(iter);
             35         }
             36     }
             37     virtual void Display(int depth)
             38     {
             39         string str(depth, '-');
             40         str += name;
             41         cout << str << endl;
             42         for (list<Company*>::iterator iter = children.begin(); iter != children.end(); ++iter)
             43         {
             44             (*iter)->Display(depth + 2);
             45         }
             46     }
             47     virtual void LineOfDuty()
             48     {
             49         for (list<Company*>::iterator iter = children.begin(); iter != children.end(); ++iter)
             50         {
             51             (*iter)->LineOfDuty();
             52         }
             53     }
             54 };
             55 
             56 class HRDepartment : public Company
             57 {
             58 public:
             59     HRDepartment(const string& s) : Company(s) {}
             60     virtual void Add(Company* c) {}
             61     virtual void Remove(Company* c) {}
             62     virtual void Display(int depth)
             63     {
             64         string str(depth, '-');
             65         str += name;
             66         cout << str << endl;
             67     }
             68     virtual void LineOfDuty()
             69     {
             70         cout << name << " 員工招聘培訓(xùn)管理!" << endl;
             71     }
             72 };
             73 
             74 class FinanceDepartment : public Company
             75 {
             76 public:
             77     FinanceDepartment(const string& s) : Company(s) {}
             78     virtual void Add(Company* c) {}
             79     virtual void Remove(Company* c) {}
             80     virtual void Display(int depth)
             81     {
             82         string str(depth, '-');
             83         str += name;
             84         cout << str << endl;
             85     }
             86     virtual void LineOfDuty()
             87     {
             88         cout << name << " 公司財(cái)務(wù)收支管理!" << endl;
             89     }
             90 };
             91 
             92 int main()
             93 {
             94     ConcreteCompany root("北京總公司");
             95     root.Add(new HRDepartment("總公司人力資源部"));
             96     root.Add(new FinanceDepartment("總公司財(cái)務(wù)部"));
             97 
             98     ConcreteCompany* comp = new ConcreteCompany("上海華東分公司"); 
             99     comp->Add(new HRDepartment("華東分公司人力資源部"));
            100     comp->Add(new FinanceDepartment("華東分公司財(cái)務(wù)部"));
            101     root.Add(comp);
            102 
            103     ConcreteCompany* comp2 = new ConcreteCompany("南京辦事處");
            104     comp2->Add(new HRDepartment("南京辦事處人力資源部"));
            105     comp2->Add(new FinanceDepartment("南京辦事處財(cái)務(wù)部"));
            106     root.Add(comp2);
            107 
            108     ConcreteCompany* comp3 = new ConcreteCompany("杭州辦事處");
            109     comp3->Add(new HRDepartment("杭州辦事處人力資源部"));
            110     comp3->Add(new FinanceDepartment("杭州辦事處財(cái)務(wù)部"));
            111     root.Add(comp3);
            112 
            113     cout << "結(jié)構(gòu)圖:" << endl;
            114     root.Display(1);
            115 
            116     cout << "職責(zé):"  << endl;
            117     root.LineOfDuty();
            118 
            119     return 0;
            120 }
            posted on 2011-04-29 16:14 unixfy 閱讀(235) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产精品久久毛片完整版| 99久久成人18免费网站| 久久人人添人人爽添人人片牛牛| 亚洲国产精品成人AV无码久久综合影院| 精品久久久久久久久久久久久久久| 亚洲v国产v天堂a无码久久| 久久人人爽人人爽人人片AV高清 | 日日躁夜夜躁狠狠久久AV| 97精品伊人久久大香线蕉| 日韩AV无码久久一区二区| 久久亚洲国产午夜精品理论片| 欧美成a人片免费看久久| 三上悠亚久久精品| 伊人久久国产免费观看视频| 久久国产色AV免费看| 久久精品中文字幕有码| 久久丫精品国产亚洲av不卡| 欧美粉嫩小泬久久久久久久 | 中文精品久久久久人妻不卡| 久久综合狠狠色综合伊人| 久久国产色av免费看| 久久精品这里只有精99品| 久久精品国产免费| 91精品国产高清久久久久久io| 久久久这里有精品| 久久久久久国产精品无码下载 | 久久久久久国产精品无码下载 | 亚洲午夜久久久久久久久久| 久久精品国内一区二区三区| 婷婷久久久亚洲欧洲日产国码AV | 国产精品一区二区久久精品无码| 久久久久亚洲AV无码网站| 国产香蕉久久精品综合网| 欧美激情精品久久久久久久九九九 | 久久99中文字幕久久| 精品无码久久久久国产| 亚洲AV日韩精品久久久久| 亚洲国产美女精品久久久久∴| 无码任你躁久久久久久| 色偷偷88欧美精品久久久| 亚洲精品99久久久久中文字幕|