• <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++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              25 Posts :: 0 Stories :: 23 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(18)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

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

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


            實現代碼:
            //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;
            }

            上面代碼中,我們取出A、B,并對B進行了修改。

            最后輸出為:
            CharacterA:A(100,200)
            CharacterB:B(500,800)
            posted on 2009-02-11 14:57 emptysoul 閱讀(582) 評論(0)  編輯 收藏 引用
            久久久九九有精品国产| 久久久久久久综合综合狠狠| 影音先锋女人AV鲁色资源网久久| 亚洲成av人片不卡无码久久 | 2021久久精品国产99国产精品| 色播久久人人爽人人爽人人片AV| 无码AV波多野结衣久久| 国产精品久久久99| 亚洲国产精品狼友中文久久久| 精品免费久久久久久久| 久久精品国产WWW456C0M| 久久人人爽人人爽人人AV东京热 | 国产精品伊人久久伊人电影 | 91麻豆精品国产91久久久久久| 亚洲精品97久久中文字幕无码| 久久久青草久久久青草| 看全色黄大色大片免费久久久| 久久久久久国产精品无码下载| 国产韩国精品一区二区三区久久| 久久国产热精品波多野结衣AV| 国内精品伊人久久久久网站| 久久久久亚洲av成人网人人软件 | 久久久久综合网久久| 亚洲AV无码久久精品色欲| 无码人妻久久一区二区三区蜜桃| 青青草国产成人久久91网| 久久精品国产亚洲av麻豆色欲| 免费一级做a爰片久久毛片潮| 中文字幕成人精品久久不卡| 99久久精品国产高清一区二区| 精品免费久久久久国产一区| 久久久WWW成人免费精品| 青青草原综合久久大伊人精品| 久久精品综合网| 99久久伊人精品综合观看| 99久久国产综合精品女同图片| 精品久久久久久无码中文字幕| 91久久香蕉国产熟女线看| 国产精品成人99久久久久 | 久久久女人与动物群交毛片| 伊人久久精品无码二区麻豆|