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

            emptysoul

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              25 Posts :: 0 Stories :: 23 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(18)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            構建器模式(Builder)的目標是將對象的創建與它的表示法分開,意味著創建過程保持原狀,但產生對象的表示法可能不同,它通常用來創建復雜的對象,這個對象是由多個組件組成的。
            對于銷售組裝電腦的銷售商來說,他們要銷售電腦,而電腦通常由CPU、主板及硬盤等部件組成,這時,電腦的組成就可以由Builder模式來解決。

            UML圖如下:


            代碼如下:
            //ComputerPart.h
            #include <string>

            class ComputerPart  
            {
            public:
                ComputerPart();
                ComputerPart(std::
            string);
                
            virtual ~ComputerPart();

                friend std::ostream
            & operator<<(std::ostream& os, ComputerPart& part);
            private:
                std::
            string m_strPart;
            };

            //ComputerPart.cpp
            #include "stdafx.h"
            #include 
            "ComputerPart.h"
            #include 
            <iostream>

            using namespace std;

            ComputerPart::ComputerPart()
            {

            }

            ComputerPart::ComputerPart(
            string part)
            {
                m_strPart 
            = part;
            }

            ComputerPart::
            ~ComputerPart()
            {

            }

            std::ostream
            & operator<<(std::ostream& os, ComputerPart& part)
            {
                
            return os << part.m_strPart << " ";
            }

            //DesktopProduct.h
            #include <vector>

            class ComputerPart;
            class DesktopProduct  
            {
            public:
                DesktopProduct();
                
            virtual ~DesktopProduct();

                
            void AddPart(ComputerPart*);
                friend std::ostream
            & operator<<(std::ostream& os, DesktopProduct& computer);
            private:
                std::vector
            <ComputerPart*> m_vParts;
            };

            //DesktopProduct.cpp
            #include "stdafx.h"
            #include 
            "DesktopProduct.h"
            #include 
            "ComputerPart.h"
            #include 
            <iostream>
            #include 
            <typeinfo>

            using namespace std;

            DesktopProduct::DesktopProduct()
            {

            }

            DesktopProduct::
            ~DesktopProduct()
            {
                
            }

            void DesktopProduct::AddPart(ComputerPart* pPart)
            {
                m_vParts.push_back(pPart);
            }

            ostream
            & operator<<(ostream& os, DesktopProduct& computer)
            {
                vector
            <ComputerPart*>::iterator it;
                
            for(it = computer.m_vParts.begin(); it != computer.m_vParts.end(); ++it)
                {
                    os 
            << **it;
                }

                
            return os;
            }

            //Builder.h
            class DesktopProduct;
            class Builder  
            {
            public:
                Builder();
                
            virtual ~Builder();

                
            virtual void BuilderCPU() = 0;
                
            virtual void BuilderMainboard() = 0;
                
            virtual void BuilderHarddisk() = 0;

                
            void CreateComputer();
                DesktopProduct
            * GetComputer();
            protected:
                DesktopProduct
            * m_pComputer;
            };

            //Builder.cpp
            #include "stdafx.h"
            #include 
            "Builder.h"
            #include 
            "DesktopProduct.h"

            Builder::Builder()
            {
                m_pComputer 
            = 0;
            }

            Builder::
            ~Builder()
            {

            }

            void Builder::CreateComputer()
            {
                m_pComputer 
            = new DesktopProduct;
            }

            DesktopProduct
            * Builder::GetComputer()
            {
                
            return m_pComputer;
            }

            //DesktopBuilder.h
            #include "Builder.h"

            class DesktopBuilder : public Builder 
            {
            public:
                DesktopBuilder();
                
            virtual ~DesktopBuilder();

                
            void BuilderCPU();
                
            void BuilderMainboard();
                
            void BuilderHarddisk();
            };

            //DesktopBuilder.cpp
            #include "stdafx.h"
            #include 
            "DesktopBuilder.h"
            #include 
            "DesktopProduct.h"
            #include 
            "ComputerPart.h"
            #include 
            <string>

            using namespace std;

            DesktopBuilder::DesktopBuilder()
            {

            }

            DesktopBuilder::
            ~DesktopBuilder()
            {

            }

            void DesktopBuilder::BuilderCPU()
            {
                m_pComputer
            ->AddPart(new ComputerPart("CPU"));
            }

            void DesktopBuilder::BuilderHarddisk()
            {
                m_pComputer
            ->AddPart(new ComputerPart("硬盤"));
            }

            void DesktopBuilder::BuilderMainboard()
            {
                m_pComputer
            ->AddPart(new ComputerPart("主板"));
            }

            //Seller.h
            class Builder;
            class Seller  
            {
            public:
                Seller();
                
            virtual ~Seller();
                
                
            void SetBuilder(Builder*);
                
            void Construct();
            private:
                Builder
            * m_pBuilder;
            };

            //Seller.cpp
            #include "stdafx.h"
            #include 
            "Seller.h"
            #include 
            "Builder.h"

            Seller::Seller()
            {
                m_pBuilder 
            = 0;
            }

            Seller::
            ~Seller()
            {

            }

            void Seller::SetBuilder(Builder* pBuilder)
            {
                m_pBuilder 
            = pBuilder;
            }

            void Seller::Construct()
            {
                m_pBuilder
            ->CreateComputer();
                m_pBuilder
            ->BuilderCPU();
                m_pBuilder
            ->BuilderHarddisk();
                m_pBuilder
            ->BuilderMainboard();
            }

            //main.cpp
            #include "stdafx.h"
            #include 
            "Builder.h"
            #include 
            "DesktopBuilder.h"
            #include 
            "Seller.h"
            #include 
            "DesktopProduct.h"
            #include 
            <iostream>

            using namespace std;

            int main(int argc, char* argv[])
            {
                Builder
            * pBuilder = new DesktopBuilder;
                Seller
            * pSeller = new Seller;
                pSeller
            ->SetBuilder(pBuilder);
                pSeller
            ->Construct();
                cout 
            << "組裝一臺電腦,由下列部件組成:\n" << *(pBuilder->GetComputer()) << endl;

                
            return 0;
            }

            最后輸出為:
            組裝一臺電腦,由下列部件組成:
            CPU 硬盤 主板

            該例中,產品臺式電腦(DesktopProduct)由CPU、硬盤及主板組成,它的組成過程是交給構建器(DesktopBuilder)來組合的,而構建器又是由電腦組裝人員(Seller)來進行操作,最終,電腦組裝人員組裝完成一電腦,然后銷售組客戶。
            posted on 2009-02-08 20:45 emptysoul 閱讀(430) 評論(0)  編輯 收藏 引用
            久久精品国产亚洲精品2020| 中文成人久久久久影院免费观看 | 久久免费视频网站| 色综合久久综合网观看| 94久久国产乱子伦精品免费| 久久SE精品一区二区| 欧洲精品久久久av无码电影| 色综合久久88色综合天天| 青青草原综合久久大伊人导航| 久久人人爽爽爽人久久久| 少妇被又大又粗又爽毛片久久黑人| 国产综合免费精品久久久| 国产精品99久久久精品无码| 国产精品久久久久久影院| 无码任你躁久久久久久老妇App| 久久一日本道色综合久久| 久久综合精品国产一区二区三区| 日本免费久久久久久久网站| 久久夜色精品国产亚洲av| 东京热TOKYO综合久久精品| 久久国产色AV免费观看| 精品水蜜桃久久久久久久| 麻豆成人久久精品二区三区免费| 久久成人18免费网站| 国产亚洲精久久久久久无码| 久久频这里精品99香蕉久| 亚洲人成无码www久久久| 久久婷婷久久一区二区三区| 成人午夜精品无码区久久| 久久婷婷成人综合色综合| 久久久久久久免费视频| 久久久久久亚洲精品不卡| 亚洲国产日韩欧美久久| 精品久久久久久国产免费了| 久久综合综合久久97色| 国产99精品久久| 日本精品久久久久中文字幕8| 狠狠干狠狠久久| 久久亚洲日韩看片无码| 亚洲精品午夜国产va久久 | 99久久精品免费看国产一区二区三区 |