• <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://m.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://m.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://m.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这里只有精品国产| 亚洲精品无码久久毛片| 国产精品欧美久久久久天天影视| 国产精品18久久久久久vr| 精品综合久久久久久97超人 | 激情伊人五月天久久综合 | 久久无码人妻一区二区三区午夜| 久久受www免费人成_看片中文 | 亚洲中文字幕无码久久2017| 亚洲综合伊人久久大杳蕉| 久久久久亚洲av无码专区导航| 九九精品99久久久香蕉| 久久综合狠狠色综合伊人| 国产成人精品久久亚洲| 亚洲国产成人久久综合区| 久久综合久久自在自线精品自 | 久久男人中文字幕资源站| 精品久久亚洲中文无码| 久久精品国产免费| 亚洲精品WWW久久久久久| 久久精品夜夜夜夜夜久久| 久久精品18| 精品国产乱码久久久久久郑州公司 | 久久亚洲私人国产精品vA | 奇米综合四色77777久久| 国产日韩欧美久久| 亚洲va久久久噜噜噜久久狠狠| 国产激情久久久久影院| 国色天香久久久久久久小说| 91久久精品电影| 伊人久久大香线蕉AV色婷婷色| 韩国三级中文字幕hd久久精品| 久久国产劲爆AV内射—百度| 国产精品无码久久久久| 成人久久精品一区二区三区 | 色婷婷久久综合中文久久蜜桃av| 久久婷婷人人澡人人| 9999国产精品欧美久久久久久| 久久久久免费看成人影片| 深夜久久AAAAA级毛片免费看 |