• <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 閱讀(578) 評論(0)  編輯 收藏 引用
            国产高清美女一级a毛片久久w| 热久久国产欧美一区二区精品| 亚洲AV日韩精品久久久久| 久久综合综合久久综合| 97久久精品人人做人人爽| 久久久久久曰本AV免费免费| 精品久久久久久成人AV| 亚洲伊人久久成综合人影院 | 久久精品国产99久久丝袜| 伊人久久大香线蕉亚洲| 国产精品久久久久天天影视| 久久精品免费全国观看国产| 精品久久久久久无码中文字幕一区 | 亚洲国产精品无码久久久久久曰| 久久天天躁狠狠躁夜夜avapp| 久久久久久A亚洲欧洲AV冫 | 久久亚洲精品成人AV| 久久久久无码国产精品不卡| 2021久久精品国产99国产精品| 伊人色综合久久天天人守人婷| 国产精品午夜久久| 久久―日本道色综合久久| 亚洲精品tv久久久久久久久| 日韩欧美亚洲综合久久影院Ds| 久久精品国产影库免费看| 久久精品国产久精国产思思 | 免费精品久久久久久中文字幕 | 亚洲AV无码久久精品蜜桃| 国产精品熟女福利久久AV | 亚洲精品乱码久久久久久蜜桃| 久久国产香蕉视频| 亚洲人成网站999久久久综合| 亚洲成色999久久网站| 色综合久久综精品| 久久国产精品免费一区二区三区 | 日批日出水久久亚洲精品tv| 国产精品热久久毛片| 久久天天躁狠狠躁夜夜av浪潮| 亚洲AⅤ优女AV综合久久久| 少妇熟女久久综合网色欲| 久久久久久伊人高潮影院|