• <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://www.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://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:????????李創(chuàng)
            ????????????????
            http://www.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 | 主颯
            老司机午夜网站国内精品久久久久久久久| 日韩AV毛片精品久久久| 国产精品久久婷婷六月丁香| 国产产无码乱码精品久久鸭| 久久超乳爆乳中文字幕| 日本精品久久久久中文字幕| 久久国产高清字幕中文| 国产精品久久久久免费a∨| 狠狠色丁香婷婷综合久久来| 欧美一级久久久久久久大| 麻豆成人久久精品二区三区免费| 久久精品国产精品亚洲下载| 久久精品无码午夜福利理论片 | 久久久久亚洲精品日久生情| 久久综合欧美成人| 久久久久无码精品| 色狠狠久久AV五月综合| 欧美日韩精品久久久免费观看| 精品久久久中文字幕人妻| 精品久久久久久99人妻| 久久久久久无码Av成人影院| 精品无码久久久久久久动漫| 亚洲精品无码久久久久去q| 久久国产成人精品国产成人亚洲| 少妇久久久久久被弄高潮| 久久人人超碰精品CAOPOREN| 久久午夜电影网| 久久国产成人精品麻豆| 97久久香蕉国产线看观看| 亚洲中文字幕无码一久久区| 久久久久亚洲?V成人无码| 91久久精品国产免费直播| AV色综合久久天堂AV色综合在| 久久久久AV综合网成人| 久久精品国产亚洲AV忘忧草18| 国产99久久久国产精品小说| 国产午夜电影久久| 久久黄色视频| 日韩久久久久中文字幕人妻| 中文成人久久久久影院免费观看| 久久精品一区二区影院|