• <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è)計模式》
            享元模式(Flyweight):
            運用共享技術(shù)有效地支持大量細粒度的對象。

            結(jié)構(gòu)型

            UML 類圖:




            代碼實現(xiàn) C++:
              1 #include <iostream>
              2 #include <map>
              3 #include <string>
              4 using namespace std;
              5 
              6 class User
              7 {
              8 private:
              9     string name;
             10 public:
             11     User(const string& s) : name(s) {}
             12     string getName()
             13     {
             14         return name;
             15     }
             16 };
             17 
             18 class WebSite
             19 {
             20 public:
             21     WebSite() {}
             22     virtual ~WebSite() {}
             23     virtual void Use(User* user) = 0;
             24 };
             25 
             26 class ConcreteWebSite : public WebSite
             27 {
             28 private:
             29     string name;
             30 public:
             31     ConcreteWebSite() {}
             32     virtual ~ConcreteWebSite() {}
             33     ConcreteWebSite(const string& s) : name(s){}
             34     virtual void Use(User* user)
             35     {
             36         cout << "網(wǎng)站分類:" << name << " 用戶:" << user->getName() << endl;
             37     }
             38 };
             39 
             40 class WebSiteFactory
             41 {
             42 private:
             43     map<string, WebSite*> flyweights;
             44 public:
             45     ~WebSiteFactory()
             46     {
             47         for (map<string, WebSite*>::iterator iter = flyweights.begin(); iter != flyweights.end(); ++iter)
             48         {
             49             delete iter->second;
             50         }
             51     }
             52     WebSite* GetWebSiteCategory(const string& key)
             53     {
             54         map<string, WebSite*>::iterator iter = flyweights.find(key);
             55         if (iter != flyweights.end())
             56         {
             57             return iter->second;
             58         }
             59         else
             60         {
             61             flyweights.insert(make_pair(key, new ConcreteWebSite(key)));
             62             return flyweights[key];
             63         }
             64     }
             65     int GetWebSiteCount()
             66     {
             67         return flyweights.size();
             68     }
             69 };
             70 
             71 int main()
             72 {
             73     WebSiteFactory* f = new WebSiteFactory;
             74     cout << f->GetWebSiteCount() << endl;
             75     WebSite* fx = f->GetWebSiteCategory("產(chǎn)品展示");
             76     cout << f->GetWebSiteCount() << endl;
             77     User* user = new User("小菜");
             78     fx->Use(user);
             79     delete user;
             80 
             81     WebSite* fy = f->GetWebSiteCategory("產(chǎn)品展示");
             82     cout << f->GetWebSiteCount() << endl;
             83     user = new User("大鳥");
             84     fy->Use(user);
             85     delete user;
             86 
             87     WebSite* fz = f->GetWebSiteCategory("產(chǎn)品展示");
             88     cout << f->GetWebSiteCount() << endl;
             89     user = new User("嬌嬌");
             90     fz->Use(user);
             91     delete user;
             92 
             93     WebSite* fl = f->GetWebSiteCategory("博客");
             94     cout << f->GetWebSiteCount() << endl;
             95     user = new User("老頑童");
             96     fl->Use(user);
             97     delete user;
             98 
             99     WebSite* fm = f->GetWebSiteCategory("博客");
            100     cout << f->GetWebSiteCount() << endl;
            101     user = new User("桃谷六仙");
            102     fm->Use(user);
            103     delete user;
            104 
            105     WebSite* fn = f->GetWebSiteCategory("博客");
            106     cout << f->GetWebSiteCount() << endl;
            107     user = new User("南海鱷神");
            108     fn->Use(user);
            109     delete user;
            110 
            111     cout << "網(wǎng)站分類總數(shù)為:" << f->GetWebSiteCount() << endl;
            112     delete f;
            113     return 0;
            114 }
            posted on 2011-04-30 14:09 unixfy 閱讀(239) 評論(0)  編輯 收藏 引用

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


            欧美久久一区二区三区| 综合人妻久久一区二区精品| 久久综合精品国产二区无码| 香蕉久久夜色精品国产2020| 国产精品欧美久久久久无广告| 精品国产乱码久久久久久郑州公司 | 亚洲国产成人久久综合区| 天天综合久久久网| 久久青草国产手机看片福利盒子| 久久精品国产亚洲AV电影 | 一本一本久久a久久综合精品蜜桃 一本一道久久综合狠狠老 | 久久免费高清视频| 国产V综合V亚洲欧美久久| 久久99精品久久久久婷婷| 久久久久无码精品国产不卡| 亚洲va久久久噜噜噜久久男同| 亚洲国产另类久久久精品黑人| 中文国产成人精品久久不卡| 久久99精品久久久大学生| 性色欲网站人妻丰满中文久久不卡| 日韩人妻无码精品久久久不卡| 久久精品aⅴ无码中文字字幕不卡| 久久久女人与动物群交毛片| 国产精品久久久久无码av| 国产AV影片久久久久久| 四虎国产精品免费久久| 精品久久久久久国产| 国产精品久久久亚洲| 国产激情久久久久影院小草| 午夜精品久久久久| 99久久99久久| 久久丝袜精品中文字幕| 亚洲欧美伊人久久综合一区二区| 国内精品伊人久久久久AV影院| 国产综合免费精品久久久| 国内精品伊人久久久影院| 久久夜色精品国产噜噜噜亚洲AV| 国产精品久久久天天影视香蕉 | 91精品国产综合久久久久久| 久久国产热这里只有精品| 亚洲精品无码久久久久去q|