• <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 閱讀(432) 評論(0)  編輯 收藏 引用
            97久久久久人妻精品专区| 日本福利片国产午夜久久| 99久久国产精品免费一区二区| 日韩十八禁一区二区久久| 久久久精品人妻一区二区三区蜜桃| 狠狠色丁香婷婷久久综合 | 久久r热这里有精品视频| 久久99精品国产99久久6| 亚洲女久久久噜噜噜熟女| 国产精品久久久天天影视香蕉| 日韩欧美亚洲综合久久| 久久人人青草97香蕉| 久久久久久久波多野结衣高潮| 亚洲婷婷国产精品电影人久久| 日韩精品久久久久久久电影蜜臀| 亚洲国产二区三区久久| 久久亚洲sm情趣捆绑调教| 国产精品青草久久久久福利99| 久久久久久精品无码人妻| 久久香蕉国产线看观看猫咪?v| 精品国际久久久久999波多野| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 97久久精品人人做人人爽| 国内高清久久久久久| 国产精品久久久久a影院| 久久国产精品二国产精品| 久久免费高清视频| 国内精品久久久久影院一蜜桃| 国产精品99久久久精品无码| 要久久爱在线免费观看| 99久久综合国产精品免费| 要久久爱在线免费观看| 超级97碰碰碰碰久久久久最新 | 91久久精品无码一区二区毛片| 99久久综合狠狠综合久久止| 久久久久久久人妻无码中文字幕爆| 亚洲伊人久久综合影院| 精品综合久久久久久97| 亚洲精品乱码久久久久久久久久久久 | 久久99精品国产99久久6| 国产毛片久久久久久国产毛片|