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

            C++研究

            C++細(xì)節(jié)深度探索及軟件工程

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              37 隨筆 :: 0 文章 :: 74 評(píng)論 :: 0 Trackbacks
            The Gof has 23 design patterns , but in most of  the design books , the E.G is written in Java , So  from now on , I will write about 23 articles to implement them using C++ , the design pattern itself is discussible , so welcome everyone to give his excelent idea to me , My QQ: 286259397 And My MSN : cxl82116@msn.com.
            Welcome every one to express his ideas!

             


            This is the Second Arcticle: ADAPTER PATTERN

            While
            referring to Adapter pattern , there must be a class that play the role of a adapter which can make two or more umcompatible class compatible . To explain this world , the UML diagram can make it clear easily :


                    diagram 2-1 Class Adapter UML (referred from http://terrylee.cnblogs.com)


                    diagram 2-2  Object Adapter UML (referred from http://terrylee.cnblogs.com)


            E.G Explain them sparetely:
            if a Customer request a  CUP WITH A CAP , but the orgin system can only supply a CUP , So you it's not compatible between the Request and the Orgin System , so you must find anthor factory who supply the cap ,and make it together to statisfy the customer ,  implement it in Class Adapter Pattern , Codes goes below.
            Class Adapter Pattern:

             1/********************************************************************
             2    created:    2007/04/21
             3    created:    21:4:2007   18:47
             4    filename:     c:\Visual Studio 2005\Projects\Frist2005\Frist2005\Frist2005.cpp
             5    file path:    c:\Visual Studio 2005\Projects\Frist2005\Frist2005
             6    file base:    Frist2005
             7    file ext:    cpp
             8    author:        Chang Xinglong(King.C)
             9    
            10    purpose:    Adapter Pattern -Class
            11*********************************************************************/

            12
            13#include "stdafx.h"
            14#include <map>
            15#include <iostream>
            16
            17using namespace std;
            18
            19class OrginSystem
            20{
            21
            22public:
            23    void Supply()
            24    {
            25        cout<<"Orgin:SupplyACup"<<endl;
            26    }

            27}
            ;
            28class CapSystem
            29{
            30public:
            31    void Supply()
            32    {
            33        cout<<"CapSystem:SupplyACap"<<endl;
            34    }

            35}
            ;
            36class Adapter: public OrginSystem , CapSystem
            37{
            38public:
            39    void Supply()
            40    {
            41        OrginSystem::Supply();
            42        CapSystem::Supply();
            43        cout<<"So the request has been satisfied!"<<endl;
            44    }

            45}
            ;
            46int _tmain(int argc, _TCHAR* argv[])
            47{
            48    Adapter _adpter;
            49    _adpter.Supply();
            50    system("pause");
            51    return 0;
            52}

            The Same question , implement it using Object Adapter Pattern:
             1/********************************************************************
             2    created:    2007/04/21
             3    created:    21:4:2007   18:47
             4    filename:     c:\Visual Studio 2005\Projects\Frist2005\Frist2005\Frist2005.cpp
             5    file path:    c:\Visual Studio 2005\Projects\Frist2005\Frist2005
             6    file base:    Frist2005
             7    file ext:    cpp
             8    author:        Chang Xinglong(King.C)
             9    
            10    purpose:    Adapter Pattern-Object 
            11*********************************************************************/

            12
            13#include "stdafx.h"
            14#include <map>
            15#include <iostream>
            16
            17using namespace std;
            18
            19class OrginSystem
            20{
            21
            22public:
            23    void Supply()
            24    {
            25        cout<<"Orgin:SupplyACup"<<endl;
            26    }

            27}
            ;
            28class CapSystem
            29{
            30public:
            31    void Supply()
            32    {
            33        cout<<"CapSystem:SupplyACap"<<endl;
            34    }

            35}
            ;
            36class Adapter: public OrginSystem , CapSystem
            37{
            38public:
            39    Adapter():_os(new OrginSystem),_cs(new CapSystem)
            40    {
            41
            42    }

            43    void Supply()
            44    {
            45        _os->Supply();
            46        _cs->Supply();
            47        cout<<"So the request has been satisfied!"<<endl;
            48    }

            49private:
            50    OrginSystem *_os;
            51    CapSystem * _cs;
            52}
            ;
            53int _tmain(int argc, _TCHAR* argv[])
            54{
            55    OrginSystem _orign=new _adpter();
            56    _orign.Supply();
            57    system("pause");
            58    return 0;
            59}

            60
            61

            In C++ , Muiltple-Derived pattern is not a recommend pattern, So if possible , use the Obeject -Adpter Pattern.

            That's all ,Thanks! if any different idea , send me E-mail.
            posted on 2007-04-21 19:13 常興龍 閱讀(1438) 評(píng)論(4)  編輯 收藏 引用 所屬分類: Design Patterns & Engeering

            評(píng)論

            # re: Implement "GOF's Adapter pattern" Using C++(Series of Gof patterns using C++ 2nd article) 2007-04-22 13:23 kurt
            I think the UML is enough for us to understand it  回復(fù)  更多評(píng)論
              

            # re: Implement "GOF's Adapter pattern" Using C++(Series of Gof patterns using C++ 2nd article) 2007-04-22 14:47 天津大學(xué)計(jì)算機(jī)學(xué)院 常興龍
            hehe ,thanks for your comment , it's just for the beginner study c++ systemly and this article can demostrate that how to implement interface( in Java , there is the Keyword interface) using virtual function in C++ , the uml itself didn't express this. Thanks again!  回復(fù)  更多評(píng)論
              

            # re: Implement "GOF's Adapter pattern" Using C++(Series of Gof patterns using C++ 2nd article) 2007-04-22 21:27 ★田德健★
            all are english....  回復(fù)  更多評(píng)論
              

            # re: Implement "GOF's Adapter pattern" Using C++(Series of Gof patterns using C++ 2nd article) 2007-09-12 15:47 Andrew Selivanov
            I suppose this would be more compatible version (see below)
            ----------------------------------------------------------
            #include <iostream>

            #define USE_ADAPTER
            #ifndef USE_ADAPTER

            class OrginSystem
            {

            public:
            void Supply()
            {
            std::cout<<"Orgin:SupplyACup"<<std::endl;
            }
            };
            class CapSystem
            {
            public:
            void Supply()
            {
            std::cout<<"CapSystem:SupplyACap"<<std::endl;
            }
            };
            class Adapter: public OrginSystem , CapSystem
            {
            public:
            void Supply()
            {
            OrginSystem::Supply();
            CapSystem::Supply();
            std::cout<<"So the request has been satisfied!"<<std::endl;
            }
            };

            int main()
            {
            Adapter adapter;
            adapter.Supply();
            }
            #else

            class OrginalSystem
            {

            public:

            virtual void Supply()
            {
            std::cout<<"Orgin:SupplyACup"<<std::endl;
            }
            };
            class CapSystem
            {
            public:
            virtual void Supply()
            {
            std::cout<<"CapSystem:SupplyACap"<<std::endl;
            }
            };
            class Adapter: public OrginalSystem , CapSystem
            {
            OrginalSystem* _os;
            CapSystem* _cs;

            public:
            Adapter():_os(new OrginalSystem),_cs(new CapSystem)
            {

            }
            void Supply()
            {
            _os->Supply();
            _cs->Supply();
            std::cout<<"So the request has been satisfied!"<<std::endl;
            }
            };

            int main()
            {
            OrginalSystem* original = new Adapter();
            original->Supply();
            delete original;
            }

            #endif
            ----------------------------------------------------------
            Andrew  回復(fù)  更多評(píng)論
              

            > hi的博客
            久久亚洲精品无码观看不卡| 国产亚洲色婷婷久久99精品91| 久久久久99精品成人片牛牛影视| 国内精品久久久久国产盗摄| 亚洲国产精品成人久久蜜臀| 久久这里只有精品18| 久久免费视频网站| 精品久久久久久中文字幕大豆网| 日本久久久久亚洲中字幕| 久久精品亚洲男人的天堂| 成人久久免费网站| 色综合合久久天天综合绕视看| 亚洲国产成人久久笫一页| 97精品久久天干天天天按摩| 一级做a爰片久久毛片看看| 久久精品国产只有精品2020| 亚洲精品美女久久久久99小说| 久久国产一区二区| 18岁日韩内射颜射午夜久久成人| 国产精品久久久久一区二区三区| 亚洲国产精品一区二区久久hs| 久久亚洲中文字幕精品一区四 | 久久狠狠高潮亚洲精品| 久久伊人五月天论坛| 99久久精品免费看国产一区二区三区 | 久久久久亚洲精品天堂| 性做久久久久久久久| 久久99精品九九九久久婷婷| 久久99国产精品久久| 亚洲AV无码久久精品成人 | 久久婷婷五月综合成人D啪 | 日韩欧美亚洲综合久久 | 综合久久国产九一剧情麻豆| 久久最新免费视频| 欧美午夜A∨大片久久 | 久久精品蜜芽亚洲国产AV| 老男人久久青草av高清| 亚洲国产成人久久一区WWW| 久久青青草原精品国产不卡| 久久91这里精品国产2020| 久久激情五月丁香伊人|