• <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ù)有效地支持大量細(xì)粒度的對象。結(jié)構(gòu)圖如下:
             

            以一個文本編輯器的例子來說明,在文本編輯器中經(jīng)常要輸入大量的重復(fù)字符,例如在文本中輸入AAABBAABB......,這時AB大量重復(fù)出現(xiàn),這些字符可能只是某些屬性不一樣,若每次輸入時都重新實例化一個字符,那么在內(nèi)存空間中將存在大量的字符對象,此時若利用享元模式將重復(fù)的字符進(jìn)行共享,每次輸入時都從共享單元中取出字符,并且對其進(jìn)行相應(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進(jìn)行了修改。

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

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


            国产精品无码久久综合网| 7777久久久国产精品消防器材| 久久久久亚洲AV无码永不| 精品无码久久久久久尤物| 久久久不卡国产精品一区二区| 香蕉久久永久视频| 精品熟女少妇a∨免费久久| 国产精品99久久不卡| 久久婷婷国产剧情内射白浆 | 久久精品人妻一区二区三区| 久久中文字幕精品| 51久久夜色精品国产| 久久久久99精品成人片| 久久精品国产2020| 久久中文字幕视频、最近更新| 一本色道久久综合亚洲精品| 久久久精品日本一区二区三区| 久久久久亚洲AV无码网站| 亚洲精品成人久久久| 国产高潮国产高潮久久久91| 国产精品99久久久精品无码| 久久久久亚洲AV无码专区桃色| 精品一区二区久久| 久久精品午夜一区二区福利| 久久成人国产精品免费软件| 久久综合久久性久99毛片| 国产精品日韩欧美久久综合| 狠狠色丁香久久婷婷综合五月| 欧美一区二区久久精品| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产精品久久久久久久久久影院 | 亚洲精品高清国产一线久久| 青青青青久久精品国产h久久精品五福影院1421| 亚洲精品白浆高清久久久久久| 亚洲欧洲久久av| 久久久久久国产精品美女| 91久久国产视频| 久久影视国产亚洲| 久久成人精品| 伊人久久大香线蕉综合网站| 影音先锋女人AV鲁色资源网久久|