• <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>

            emptysoul

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              25 Posts :: 0 Stories :: 23 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(18)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            享無模式(Flyweight)是運用共享技術(shù)有效地支持大量細粒度的對象。結(jié)構(gòu)圖如下:
             

            以一個文本編輯器的例子來說明,在文本編輯器中經(jīng)常要輸入大量的重復(fù)字符,例如在文本中輸入AAABBAABB......,這時AB大量重復(fù)出現(xiàn),這些字符可能只是某些屬性不一樣,若每次輸入時都重新實例化一個字符,那么在內(nèi)存空間中將存在大量的字符對象,此時若利用享元模式將重復(fù)的字符進行共享,每次輸入時都從共享單元中取出字符,并且對其進行相應(yīng)的屬性設(shè)置,那么就節(jié)省了很多空間,結(jié)構(gòu)圖如下:


            實現(xiàn)代碼:
            //Character.h
            class Character  
            {
            public:
                
            virtual ~Character();

                
            virtual void SetSize(intint= 0;
                
            virtual void Display() = 0;
            protected:
                Character();
                
            char m_chSymbol;
                
            int m_nWeight;
                
            int m_nHeight;
            };

            //Character.cpp
            #include "stdafx.h"
            #include 
            "Character.h"

            Character::Character()
            {

            }

            Character::
            ~Character()
            {

            }

            //CharacterA.h
            #include "Character.h"

            class CharacterA : public Character
            {
            public:
                CharacterA();
                
            virtual ~CharacterA();

                
            void SetSize(intint);
                
            void Display();
            };

            //CharacterA.cpp
            #include "stdafx.h"
            #include 
            "CharacterA.h"
            #include 
            <iostream>

            using namespace std;

            CharacterA::CharacterA()
            {
                
            this->m_chSymbol = 'A';
                
            this->m_nWeight = 100;
                
            this->m_nHeight = 200;
            }

            CharacterA::
            ~CharacterA()
            {

            }

            void CharacterA::SetSize(int nWeight, int nHeight)
            {
                
            this->m_nWeight = nWeight;
                
            this->m_nHeight = nHeight;
            }

            void CharacterA::Display()
            {
                cout 
            << "CharacterA:" << m_chSymbol << "(" << m_nWeight << "," << m_nHeight << ")" << endl;
            }

            //CharacterB.h
            #include "Character.h"

            class CharacterB : public Character
            {
            public:
                CharacterB();
                
            virtual ~CharacterB();

                
            void SetSize(intint);
                
            void Display();
            };

            //CharacterB.cpp
            #include "stdafx.h"
            #include 
            "CharacterB.h"
            #include 
            <iostream>

            using namespace std;

            CharacterB::CharacterB()
            {
                
            this->m_chSymbol = 'B';
                
            this->m_nWeight = 100;
                
            this->m_nHeight = 200;
            }

            CharacterB::
            ~CharacterB()
            {

            }

            void CharacterB::SetSize(int nWeight, int nHeight)
            {
                
            this->m_nWeight = nWeight;
                
            this->m_nHeight = nHeight;
            }

            void CharacterB::Display()
            {
                cout 
            << "CharacterB:" << m_chSymbol << "(" << m_nWeight << "," << m_nHeight << ")" << endl;
            }

            //CharacterFactory.h
            #include <map>

            class Character;
            class CharacterFactory  
            {
            public:
                CharacterFactory();
                
            virtual ~CharacterFactory();

                Character
            * GetCharacter(char);
            private:
                std::map
            <char, Character*> m_mChar;
            };

            //CharacterFactory.cpp
            #include "stdafx.h"
            #include 
            "CharacterFactory.h"
            #include 
            "CharacterA.h"
            #include 
            "CharacterB.h"

            using namespace std;

            CharacterFactory::CharacterFactory()
            {
                m_mChar.insert(make_pair
            <char, Character*>('A'new CharacterA));
                m_mChar.insert(make_pair
            <char, Character*>('B'new CharacterB));
            }

            CharacterFactory::
            ~CharacterFactory()
            {

            }

            Character
            * CharacterFactory::GetCharacter(char chIn)
            {
                map
            <char, Character*>::iterator it = m_mChar.find(chIn);
                
            if(it != m_mChar.end())
                {
                   
            return (Character*)it->second;
                }

                
            return NULL;
            }

            //main.cpp
            #include "stdafx.h"
            #include 
            "CharacterFactory.h"
            #include 
            "Character.h"

            int main(int argc, char* argv[])
            {
                CharacterFactory
            * pFactory = new CharacterFactory;
                Character
            * pChar = pFactory->GetCharacter('A');
                pChar
            ->Display();
                pChar 
            = pFactory->GetCharacter('B');
                pChar
            ->SetSize(500800);
                pChar
            ->Display();

                
            return 0;
            }

            上面代碼中,我們?nèi)〕鯝、B,并對B進行了修改。

            最后輸出為:
            CharacterA:A(100,200)
            CharacterB:B(500,800)
            posted on 2009-02-11 14:57 emptysoul 閱讀(578) 評論(0)  編輯 收藏 引用

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


            久久成人国产精品免费软件| 99久久久国产精品免费无卡顿 | 久久精品国产精品青草app| 99久久免费国产精精品| 色综合久久综精品| 久久免费看黄a级毛片| 国产V综合V亚洲欧美久久| 日韩精品无码久久一区二区三| 中文精品久久久久人妻不卡| 久久免费精品视频| 婷婷久久五月天| 久久婷婷综合中文字幕| 久久久精品人妻一区二区三区蜜桃| 精品久久久久久国产| 久久夜色精品国产亚洲| 国产综合成人久久大片91| 狠狠色丁香久久婷婷综合| 成人精品一区二区久久久| 亚洲综合精品香蕉久久网| 久久se精品一区二区影院 | 久久综合综合久久综合| 国产精品青草久久久久福利99 | 国内精品久久九九国产精品| 久久久www免费人成精品| 久久99国产一区二区三区| 久久99国产乱子伦精品免费| 一本一本久久aa综合精品| 亚洲国产成人久久综合碰| 99久久亚洲综合精品成人| 97久久超碰国产精品旧版| 色欲综合久久躁天天躁蜜桃| 久久夜色精品国产噜噜亚洲a| 久久久久久极精品久久久| 亚洲乱亚洲乱淫久久| 久久91精品国产91久久户| AV无码久久久久不卡网站下载| 亚洲av日韩精品久久久久久a| 亚洲午夜久久久影院| 久久亚洲精品成人av无码网站| 亚洲∧v久久久无码精品| 久久九九精品99国产精品|