• <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 常興龍 閱讀(1452) 評(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的博客
            久久亚洲国产中v天仙www| 久久亚洲AV无码精品色午夜| 久久精品国产69国产精品亚洲| 久久99精品久久只有精品| 亚洲综合久久综合激情久久| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 久久免费的精品国产V∧| 国产精品成人99久久久久| 蜜桃麻豆WWW久久囤产精品| 久久精品成人免费看| 婷婷国产天堂久久综合五月| 丁香五月网久久综合| 亚洲国产成人精品久久久国产成人一区二区三区综 | 久久久国产精品亚洲一区| 国产香蕉97碰碰久久人人| 亚洲精品乱码久久久久久久久久久久| 午夜不卡888久久| 久久99精品久久久久久久久久| 久久中文字幕无码专区| 精品国产青草久久久久福利| 99久久无码一区人妻a黑| 久久人人爽人人爽人人av东京热| 国产精品日韩欧美久久综合| 97久久香蕉国产线看观看| 亚洲精品tv久久久久久久久| 麻豆久久久9性大片| 久久天天躁狠狠躁夜夜2020| 久久精品成人免费网站| 久久国产成人精品麻豆| 粉嫩小泬无遮挡久久久久久| 亚洲愉拍99热成人精品热久久| 中文字幕精品久久| 2021国产精品午夜久久| 久久亚洲精品国产精品婷婷| 亚洲国产成人精品女人久久久 | 婷婷五月深深久久精品| 久久久久久曰本AV免费免费| 久久久久久久久久久久久久| 精产国品久久一二三产区区别| 久久无码专区国产精品发布| 伊人久久精品无码二区麻豆|