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

            那誰(shuí)的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲(chǔ),算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評(píng)論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            常見設(shè)計(jì)模式的解析和實(shí)現(xiàn)(C++)之四-Prototype模式

            作用:
            用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。

            UML結(jié)構(gòu)圖:

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

            接口函數(shù):
            1)Prototype::Clone函數(shù):純虛函數(shù),根據(jù)不同的派生類來(lái)實(shí)例化創(chuàng)建對(duì)象.

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

            實(shí)現(xiàn):
            1)Prototype.h
            /********************************************************************
            ????created:????2006/07/20
            ????filename:?????Prototype.h
            ????author:????????李創(chuàng)
            ????????????????
            http://m.shnenglu.com/converse/

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


            #ifndef?PROTOTYPE_H
            #define?PROTOTYPE_H

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

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

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

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

            //?派生自Prototype,實(shí)現(xiàn)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:????????李創(chuàng)
            ????????????????
            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:????????李創(chuàng)
            ????????????????
            http://m.shnenglu.com/converse/

            ????purpose:????Prototype模式的測(cè)試代碼
            ********************************************************************
            */


            #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 那誰(shuí) 閱讀(5130) 評(píng)論(4)  編輯 收藏 引用 所屬分類: 設(shè)計(jì)模式

            評(píng)論

            # re: 常見設(shè)計(jì)模式的解析和實(shí)現(xiàn)(C++)之四-Prototype模式 [未登錄](méi)  回復(fù)  更多評(píng)論   

            好人啊!!
            太感謝了!!
            初學(xué)設(shè)計(jì)模式,看GOF的頭痛。。。
            2010-03-22 15:33 | beyond

            # re: 常見設(shè)計(jì)模式的解析和實(shí)現(xiàn)(C++)之四-Prototype模式   回復(fù)  更多評(píng)論   

            都是好文章啊,我要一篇篇的學(xué)習(xí)
            2012-01-12 11:15 | _ahu

            # re: 常見設(shè)計(jì)模式的解析和實(shí)現(xiàn)(C++)之四-Prototype模式   回復(fù)  更多評(píng)論   

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

            # re: 常見設(shè)計(jì)模式的解析和實(shí)現(xiàn)(C++)之四-Prototype模式   回復(fù)  更多評(píng)論   

            LZ厲害啊,謝謝分享,有機(jī)會(huì)多多指教啊!
            2013-08-09 17:16 | 主颯
            亚洲色大成网站www久久九| 久久香蕉国产线看观看乱码| 国产精品久久久久久久app| 久久久久av无码免费网| 久久不射电影网| 久久成人小视频| 国产一区二区三精品久久久无广告| 久久久91人妻无码精品蜜桃HD| 伊色综合久久之综合久久| 久久99中文字幕久久| 人人狠狠综合久久88成人| 久久久久这里只有精品| 99久久免费国产特黄| 久久久久久久波多野结衣高潮| 9191精品国产免费久久| 久久A级毛片免费观看| 伊人久久大香线蕉无码麻豆| 久久中文娱乐网| 精品久久久久久国产| 久久精品国产亚洲av麻豆色欲| 久久婷婷色香五月综合激情| 国产成人无码精品久久久久免费| 久久综合给合久久狠狠狠97色69| 久久久这里有精品中文字幕| 精品久久人人妻人人做精品| 欧美综合天天夜夜久久| 精品久久8x国产免费观看| 亚洲日韩中文无码久久| 久久久国产99久久国产一| 欧美久久久久久午夜精品| 亚洲嫩草影院久久精品| 久久精品一区二区国产| 国内精品久久久人妻中文字幕| 无码AV中文字幕久久专区| 久久精品国产亚洲AV高清热| 久久久久亚洲AV成人片| 久久国产免费观看精品3| 91精品国产高清91久久久久久| 99久久国产综合精品麻豆| 亚洲国产二区三区久久| 狠狠色综合久久久久尤物|