• <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
            來自于《大話設計模式》
            組合模式(Composite):將對象組合成樹形結構以表示‘部分-整體’的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。

            UML 類圖:


            代碼實現 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 << " 員工招聘培訓管理!" << 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 << " 公司財務收支管理!" << endl;
             89     }
             90 };
             91 
             92 int main()
             93 {
             94     ConcreteCompany root("北京總公司");
             95     root.Add(new HRDepartment("總公司人力資源部"));
             96     root.Add(new FinanceDepartment("總公司財務部"));
             97 
             98     ConcreteCompany* comp = new ConcreteCompany("上海華東分公司"); 
             99     comp->Add(new HRDepartment("華東分公司人力資源部"));
            100     comp->Add(new FinanceDepartment("華東分公司財務部"));
            101     root.Add(comp);
            102 
            103     ConcreteCompany* comp2 = new ConcreteCompany("南京辦事處");
            104     comp2->Add(new HRDepartment("南京辦事處人力資源部"));
            105     comp2->Add(new FinanceDepartment("南京辦事處財務部"));
            106     root.Add(comp2);
            107 
            108     ConcreteCompany* comp3 = new ConcreteCompany("杭州辦事處");
            109     comp3->Add(new HRDepartment("杭州辦事處人力資源部"));
            110     comp3->Add(new FinanceDepartment("杭州辦事處財務部"));
            111     root.Add(comp3);
            112 
            113     cout << "結構圖:" << endl;
            114     root.Display(1);
            115 
            116     cout << "職責:"  << endl;
            117     root.LineOfDuty();
            118 
            119     return 0;
            120 }
            posted on 2011-04-29 16:14 unixfy 閱讀(235) 評論(0)  編輯 收藏 引用
            国产精品久久久久久久人人看| 国产亚洲综合久久系列| 久久91这里精品国产2020| 国产成人久久精品二区三区| 国产A级毛片久久久精品毛片| 久久久久一级精品亚洲国产成人综合AV区| 久久人人爽人人爽人人片AV麻豆| 国产精品亚洲综合专区片高清久久久 | 久久久久久精品无码人妻| 色综合久久综合中文综合网| 国产精品一久久香蕉国产线看 | 91麻豆精品国产91久久久久久| 久久播电影网| 久久影院综合精品| 色婷婷久久久SWAG精品| 久久九九有精品国产23百花影院| 久久这里有精品视频| 国产婷婷成人久久Av免费高清| 亚洲国产精品无码久久九九| 国产精品午夜久久| 久久国产欧美日韩精品| 模特私拍国产精品久久| 久久艹国产| 久久久久久久尹人综合网亚洲 | 久久久久久久精品成人热色戒| 亚洲国产精品久久66| 久久福利青草精品资源站免费| 久久精品国产99久久久古代| 日本精品久久久久中文字幕8| 久久久久亚洲精品天堂| 性做久久久久久久| 日韩乱码人妻无码中文字幕久久| 亚洲精品乱码久久久久久蜜桃| 精品欧美一区二区三区久久久| 久久99中文字幕久久| 99久久无码一区人妻a黑| 久久久久99精品成人片欧美| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲狠狠婷婷综合久久蜜芽| 麻豆一区二区99久久久久| 狠狠色丁香婷婷综合久久来|