• <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>
            蝸牛的家
            男兒當(dāng)自強(qiáng)
            posts - 48,  comments - 21,  trackbacks - 0
            意圖:
            表示一個(gè)作用與某對(duì)象結(jié)構(gòu)中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作
            UML圖:


            適用:
            一個(gè)對(duì)象結(jié)構(gòu)包含很多類對(duì)象,他們有不同的接口,而你想對(duì)這些對(duì)象實(shí)施一些依賴于其具體類的操作
            需要對(duì)一個(gè)對(duì)象結(jié)構(gòu)中的對(duì)象進(jìn)行很多不同的并且不相關(guān)的操作,而你想避免讓這些操作污染這些對(duì)象的類,Vi s i t o r 使得你可以將相關(guān)的操作集中起來(lái)定義在一個(gè)類中。當(dāng)該對(duì)象結(jié)構(gòu)被很多應(yīng)用共享時(shí),用Vi s i t o r 模式讓每個(gè)應(yīng)用僅包含需要用到的操作
            定義對(duì)象結(jié)構(gòu)的類很少變化,但經(jīng)常需要在此結(jié)構(gòu)上定義新的操作,改變對(duì)象結(jié)構(gòu)類需要重定義對(duì)所有訪問者的接口,這可能需要很大的代價(jià),如果對(duì)象結(jié)構(gòu)類經(jīng)常改變,那么可能還有在這些類中定義這些操作較好
            //test.h
            //////////////////////////////////////////////////////////////////////////
            class Visitor;

            class Element
            {
            public:
                
            virtual ~Element(){}
                
                
            virtual void Accept(Visitor &rVisitor) = 0;
            protected:
                Element()
            {}
            }
            ;

            class ConCreateElementA : public Element
            {
            public:
                
            virtual ~ConCreateElementA(){}
                
                
            virtual void Accept(Visitor &rVisitor);
            }
            ;

            class ConCreateElementB : public Element
            {
            public:
                
            virtual ~ConCreateElementB(){}

                
            virtual void Accept(Visitor &rVisitor);
            }
            ;

            class Visitor
            {
            public:
                
            virtual ~Visitor(){}
                
                
            virtual void VisitConcreateElementA(ConCreateElementA *pConcreateElementA) = 0;
                
            virtual void VisitConcreateElementB(ConCreateElementB *pConcreateElementB) = 0;
            protected:
                Visitor()
            {}
            }
            ;

            class ConcreateVisitorA
                : 
            public Visitor
            {
            public:
                
            virtual ~ConcreateVisitorA(){}

                
            virtual void VisitConcreateElementA(ConCreateElementA *pConcreateElementA);
                
            virtual void VisitConcreateElementB(ConCreateElementB *pConcreateElementB);
            }
            ;

            class ConcreateVisitorB
                : 
            public Visitor
            {
            public:
                
            virtual ~ConcreateVisitorB(){}

                
            virtual void VisitConcreateElementA(ConCreateElementA *pConcreateElementA);
                
            virtual void VisitConcreateElementB(ConCreateElementB *pConcreateElementB);
            }
            ;

            // test.cpp : Defines the entry point for the console application.
            //

            #include 
            "stdafx.h"
            #include 
            <iostream>
            #include 
            "test.h"
            //////////////////////////////////////////////////////////////////////////
            void ConCreateElementA::Accept(Visitor &rVisitor)
            {
                rVisitor.VisitConcreateElementA(
            this);
            }


            void ConCreateElementB::Accept(Visitor &rVisitor)
            {
                rVisitor.VisitConcreateElementB(
            this);
            }


            void ConcreateVisitorA::VisitConcreateElementA(ConCreateElementA *pConcreateElementA)
            {
                std::cout 
            << "VisitConcreateElementA By ConcreateVisitorA\n";
            }


            void ConcreateVisitorA::VisitConcreateElementB(ConCreateElementB *pConcreateElementA)
            {
                std::cout 
            << "VisitConcreateElementB By ConcreateVisitorA\n";
            }


            void ConcreateVisitorB::VisitConcreateElementA(ConCreateElementA *pConcreateElementA)
            {
                std::cout 
            << "VisitConcreateElementA By ConcreateVisitorB\n";
            }


            void ConcreateVisitorB::VisitConcreateElementB(ConCreateElementB *pConcreateElementA)
            {
                std::cout 
            << "VisitConcreateElementB By ConcreateVisitorB\n";
            }

            //////////////////////////////////////////////////////////////////////////
            int main(int argc, char* argv[])
            {
                Visitor 
            *pVisitor = new ConcreateVisitorA;
                Element 
            *pElement = new ConCreateElementA;
                
                pElement
            ->Accept(*pVisitor);
                
                delete pElement;
                delete pVisitor;

                system(
            "pause");
                
            return 0;
            }

            posted on 2008-08-23 12:18 黑色天使 閱讀(597) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 設(shè)計(jì)模式

            <2009年1月>
            28293031123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(2)

            隨筆分類

            隨筆檔案

            文章檔案

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久水蜜桃亚洲av无码精品麻豆| 久久99精品久久久久久齐齐| 久久久久青草线蕉综合超碰 | 伊人久久大香线蕉综合Av| 久久99国产精品久久99小说 | 精品久久一区二区三区| 欧美精品一本久久男人的天堂| 久久精品国产99国产精品| 久久天天婷婷五月俺也去| 久久精品国产亚洲AV香蕉| 久久久久久A亚洲欧洲AV冫| 亚洲AV无码久久精品色欲| 亚洲综合久久综合激情久久| 狠狠色婷婷久久综合频道日韩| 久久久久国产一级毛片高清版| 久久九九免费高清视频| 狠狠88综合久久久久综合网| 国产精品久久新婚兰兰| 国产999精品久久久久久| 久久99精品久久久久婷婷| 蜜桃麻豆WWW久久囤产精品| 99久久综合国产精品二区| 久久久久亚洲av无码专区喷水| 久久免费香蕉视频| 99热精品久久只有精品| 国产精品一区二区久久不卡| 亚洲国产另类久久久精品黑人| 欧美性猛交xxxx免费看久久久| 久久精品午夜一区二区福利| 无码国内精品久久综合88| 亚洲国产精品嫩草影院久久| 亚洲伊人久久大香线蕉苏妲己| 久久大香香蕉国产| 久久久久久亚洲AV无码专区| 久久精品国产久精国产一老狼| 欧美与黑人午夜性猛交久久久 | 久久天堂AV综合合色蜜桃网| 狠狠色综合网站久久久久久久高清 | 久久九九久精品国产免费直播| 人妻无码久久精品| 亚洲人成网站999久久久综合|