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

            那誰的技術博客

            感興趣領域:高性能服務器編程,存儲,算法,Linux內核
            隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
            數據加載中……

            常見設計模式的解析和實現(C++)之四-Prototype模式

            作用:
            用原型實例指定創建對象的種類,并且通過拷貝這些原型創建新的對象。

            UML結構圖:

            抽象基類:
            1)Prototype:虛擬基類,所有原型的基類,提供Clone接口函數

            接口函數:
            1)Prototype::Clone函數:純虛函數,根據不同的派生類來實例化創建對象.

            解析:
            Prototype模式其實就是常說的"虛擬構造函數"一個實現,C++的實現機制中并沒有支持這個特性,但是通過不同派生類實現的Clone接口函數可以完成與"虛擬構造函數"同樣的效果.舉一個例子來解釋這個模式的作用,假設有一家店鋪是配鑰匙的,他對外提供配制鑰匙的服務(提供Clone接口函數),你需要配什么鑰匙它不知道只是提供這種服務,具體需要配什么鑰匙只有到了真正看到鑰匙的原型才能配好.也就是說,需要一個提供這個服務的對象,同時還需要一個原型(Prototype),不然不知道該配什么樣的鑰匙.

            實現:
            1)Prototype.h
            /********************************************************************
            ????created:????2006/07/20
            ????filename:?????Prototype.h
            ????author:????????李創
            ????????????????
            http://www.shnenglu.com/converse/

            ????purpose:????Prototype模式的演示代碼
            ********************************************************************
            */


            #ifndef?PROTOTYPE_H
            #define?PROTOTYPE_H

            //?虛擬基類,所有原型的基類,提供Clone接口函數
            class?Prototype
            {
            public:
            ????Prototype()
            {}
            ????
            virtual?~Prototype(){}

            ????
            virtual?Prototype*?Clone()?=?0;
            }
            ;

            //?派生自Prototype,實現Clone方法
            class?ConcreatePrototype1
            ????:?
            public?Prototype
            {
            public:
            ????ConcreatePrototype1();
            ????ConcreatePrototype1(
            const?ConcreatePrototype1&);
            ????
            virtual?~ConcreatePrototype1();

            ????
            virtual?Prototype*?Clone();
            }
            ;

            //?派生自Prototype,實現Clone方法
            class?ConcreatePrototype2
            ????:?
            public?Prototype
            {
            public:
            ????ConcreatePrototype2();
            ????ConcreatePrototype2(
            const?ConcreatePrototype2&);
            ????
            virtual?~ConcreatePrototype2();

            ????
            virtual?Prototype*?Clone();
            }
            ;

            #endif

            2)Prototype.cpp
            /********************************************************************
            ????created:????2006/07/20
            ????filename:?????Prototype.cpp
            ????author:????????李創
            ????????????????
            http://www.shnenglu.com/converse/

            ????purpose:????Prototype模式的演示代碼
            ********************************************************************
            */


            #include?
            "Prototype.h"
            #include?
            <iostream>

            ConcreatePrototype1::ConcreatePrototype1()
            {
            ????std::cout?
            <<?"construction?of?ConcreatePrototype1\n";
            }


            ConcreatePrototype1::
            ~ConcreatePrototype1()
            {
            ????std::cout?
            <<?"destruction?of?ConcreatePrototype1\n";
            }


            ConcreatePrototype1::ConcreatePrototype1(
            const?ConcreatePrototype1&)
            {
            ????std::cout?
            <<?"copy?construction?of?ConcreatePrototype1\n";
            }


            Prototype
            *?ConcreatePrototype1::Clone()
            {
            ????
            return?new?ConcreatePrototype1(*this);
            }


            ConcreatePrototype2::ConcreatePrototype2()
            {
            ????std::cout?
            <<?"construction?of?ConcreatePrototype2\n";
            }


            ConcreatePrototype2::
            ~ConcreatePrototype2()
            {
            ????std::cout?
            <<?"destruction?of?ConcreatePrototype2\n";
            }


            ConcreatePrototype2::ConcreatePrototype2(
            const?ConcreatePrototype2&)
            {
            ????std::cout?
            <<?"copy?construction?of?ConcreatePrototype2\n";
            }


            Prototype
            *?ConcreatePrototype2::Clone()
            {
            ????
            return?new?ConcreatePrototype2(*this);
            }

            3)Main.cpp
            /********************************************************************
            ????created:????2006/07/20
            ????filename:?????Main.cpp
            ????author:????????李創
            ????????????????
            http://www.shnenglu.com/converse/

            ????purpose:????Prototype模式的測試代碼
            ********************************************************************
            */


            #include?
            "Prototype.h"
            #include?
            <stdlib.h>

            int?main()
            {
            ????Prototype
            *?pPrototype1?=?new?ConcreatePrototype1();
            ????Prototype
            *?pPrototype2?=?pPrototype1->Clone();

            ????Prototype
            *?pPrototype3?=?new?ConcreatePrototype2();
            ????Prototype
            *?pPrototype4?=?pPrototype3->Clone();

            ????delete?pPrototype1;
            ????delete?pPrototype2;
            ????delete?pPrototype3;
            ????delete?pPrototype4;

            ????system(
            "pause");

            ????
            return?0;
            }

            posted on 2006-07-21 13:53 那誰 閱讀(5108) 評論(4)  編輯 收藏 引用 所屬分類: 設計模式

            評論

            # re: 常見設計模式的解析和實現(C++)之四-Prototype模式 [未登錄]  回復  更多評論   

            好人啊!!
            太感謝了!!
            初學設計模式,看GOF的頭痛。。。
            2010-03-22 15:33 | beyond

            # re: 常見設計模式的解析和實現(C++)之四-Prototype模式   回復  更多評論   

            都是好文章啊,我要一篇篇的學習
            2012-01-12 11:15 | _ahu

            # re: 常見設計模式的解析和實現(C++)之四-Prototype模式   回復  更多評論   

            能看出有什么實際的用處或效果么?
            2013-04-25 17:10 | wangxin

            # re: 常見設計模式的解析和實現(C++)之四-Prototype模式   回復  更多評論   

            LZ厲害啊,謝謝分享,有機會多多指教啊!
            2013-08-09 17:16 | 主颯
            国产精品久久久久天天影视| 久久久久亚洲av无码专区喷水| 99久久夜色精品国产网站| 青青草原1769久久免费播放| 一本久久免费视频| 少妇久久久久久被弄到高潮 | 久久这里只有精品首页| 久久人人爽人人爽人人片AV麻烦| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 五月丁香综合激情六月久久| 国产精品久久久久国产A级| 久久精品国产亚洲欧美| 欧美日韩精品久久久久| 久久久久久久综合日本| 久久久久久久久久久精品尤物| 伊人久久大香线蕉无码麻豆| 一本久久免费视频| 久久国产乱子伦免费精品| 国产一区二区三区久久精品| 久久―日本道色综合久久| 国产精品伦理久久久久久| 性做久久久久久久久| 久久这里只精品99re66| 久久久91精品国产一区二区三区| 国产成人精品久久亚洲高清不卡 | 久久精品国产亚洲麻豆| 青青草国产97免久久费观看| 久久综合亚洲色一区二区三区| 97久久精品无码一区二区| AA级片免费看视频久久| 日本五月天婷久久网站| AV狠狠色丁香婷婷综合久久| 久久99精品久久久久久水蜜桃| 久久香综合精品久久伊人| 亚洲精品WWW久久久久久| 久久久久亚洲AV成人片| 久久天天躁狠狠躁夜夜av浪潮 | 国产午夜精品久久久久免费视| 国产AV影片久久久久久| 国内精品久久久久影院薰衣草| 久久福利青草精品资源站免费|