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

            Design&Art

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              26 Posts :: 0 Stories :: 38 Comments :: 0 Trackbacks

            工廠方法和抽象工廠實(shí)際上是從不同角度在描述問(wèn)題。
            工廠方法描述了具體產(chǎn)品的創(chuàng)建,而抽象工廠描述的是產(chǎn)品系列的組織。

            // ?Computer.cpp?:?Defines?the?entry?point?for?the?console?application.
            //

            #include?
            " stdafx.h "
            #include?
            < string >
            #include?
            < iostream >

            using ? namespace ?std;

            class ?Ram {} ;
            class ?IBMRam:? public ?Ram {} ;
            class ?HPRam:? public ?Ram {} ;
            class ?Cpu {} ;
            class ?IBMCpu:? public ?Cpu {} ;
            class ?HPCpu:? public ?Cpu {} ;

            class ?Computer
            {
            public :
            ?Computer(
            string ?strName,?Ram * ?pRam,?Cpu * ?pCpu)
            ?
            {
            ??m_strName?
            = ?strName;
            ??m_pRam?
            = ?pRam;
            ??m_pCpu?
            = ?pCpu;
            ??cout
            << " A? " << ?m_strName? << " ?computer?is?produced " << endl;
            ?}

            ?
            ~ Computer()
            ?
            {
            ??delete?m_pRam;
            ??delete?m_pCpu;
            ??cout
            << " A? " << ?m_strName? << " ?computer?is?deleted " << endl;
            ?}

            public :
            ?
            string ?m_strName;
            private :
            ?Ram
            * ?m_pRam;
            ?Cpu
            * ?m_pCpu;
            }
            ;

            class ?ComputerProducer
            {
            public :
            ?Computer
            * ?createComputer()
            ?
            {
            ??
            return ? new ?Computer(setName(),?createRam(),?createCpu());
            ?}

            ?
            virtual ?Ram * ?createRam()? = ? 0 ;
            ?
            virtual ?Cpu * ?createCpu()? = ? 0 ;
            ?
            virtual ? string ?setName()? = ? 0 ;
            }
            ;

            class ?IBMProducer:? public ?ComputerProducer
            {
            public :
            ?
            virtual ?Ram * ?createRam()
            ?
            {
            ??cout
            << " A?IBMRam?is?producted " << endl;
            ??
            return ? new ?IBMRam;
            ?}

            ?
            virtual ?Cpu * ?createCpu()
            ?
            {
            ??cout
            << " A?IBMCPU?is?producted " << endl;
            ??
            return ? new ?IBMCpu;
            ?}

            ?
            virtual ? string ?setName()
            ?
            {
            ??
            return ? string ( " IBM " );
            ?}

            }
            ;

            class ?HPProducer:? public ?ComputerProducer
            {
            public :
            ?
            virtual ?Ram * ?createRam()
            ?
            {
            ??cout
            << " A?HPRam?is?producted " << endl;
            ??
            return ? new ?HPRam;
            ?}

            ?
            virtual ?Cpu * ?createCpu()
            ?
            {
            ??cout
            << " A?HPCPU?is?producted " << endl;
            ??
            return ? new ?HPCpu;
            ?}

            ?
            virtual ? string ?setName()
            ?
            {
            ??
            return ? string ( " HP " );
            ?}

            }
            ;

            int ?main( int ?argc,? char * ?argv[])
            {
            ?
            // ?client?code
            ?ComputerProducer * ?pIBMFac = ? new ?IBMProducer;
            ?ComputerProducer
            * ?pHPFac? = ? new ?HPProducer;
            ?Computer
            * ?pIBMComputer? = ?pIBMFac -> createComputer();
            ?Computer
            * ?pHPComputer? = ?pHPFac? -> createComputer();
            ?delete?pIBMComputer;
            ?delete?pHPComputer;
            ?delete?pIBMFac;
            ?delete?pHPFac;
            ?
            return ? 0 ;
            }


            這個(gè)例子比較清楚了,不同的工廠生產(chǎn)不同的計(jì)算機(jī),但計(jì)算機(jī)的基本組成(這里假設(shè)計(jì)算機(jī)僅由ram和cpu組成)是一樣的,這樣的產(chǎn)品系列很適合用抽象工廠來(lái)組織。
            而在實(shí)際生產(chǎn)計(jì)算機(jī)的時(shí)候,createRam()和createCpu()這兩個(gè)工廠方法又起到了作用。

            posted on 2007-03-25 23:20 安帛偉 閱讀(1112) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 設(shè)計(jì)模式
            久久久久国产视频电影| 狠狠干狠狠久久| 婷婷国产天堂久久综合五月| 伊人久久大香线蕉综合网站| 国产成人无码精品久久久性色| 日韩av无码久久精品免费| 丁香久久婷婷国产午夜视频| 亚洲欧洲中文日韩久久AV乱码| 少妇久久久久久久久久| 国产精品伊人久久伊人电影 | 一本色道久久88综合日韩精品| 国产69精品久久久久观看软件| 久久精品国产亚洲沈樵| 综合久久给合久久狠狠狠97色| 99久久国产综合精品麻豆| 2021国产精品久久精品| 99久久精品国产一区二区三区| 亚洲精品乱码久久久久久| 久久这里有精品视频| 国产精品99久久久久久董美香| 亚洲国产另类久久久精品小说| 久久久久亚洲AV综合波多野结衣| 国产成人久久精品激情| 99久久精品免费看国产一区二区三区 | 欧美日韩中文字幕久久久不卡| 精品熟女少妇av免费久久| 久久妇女高潮几次MBA| 久久无码国产| 青青草原综合久久大伊人导航| 国产精品亚洲美女久久久| 日韩精品国产自在久久现线拍| 久久男人Av资源网站无码软件| 狠狠色综合网站久久久久久久高清| 青青久久精品国产免费看| 久久久久亚洲AV无码专区网站 | 综合人妻久久一区二区精品| 天天做夜夜做久久做狠狠| 久久久久人妻一区精品果冻| 国产成人香蕉久久久久| 久久国产影院| 欧美伊人久久大香线蕉综合|