• <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)  編輯 收藏 引用
            久久人人爽人人爽人人片AV高清| 久久综合久久综合九色| 亚洲精品乱码久久久久久蜜桃不卡| 久久精品人人做人人爽电影| 久久人爽人人爽人人片AV| 色综合久久中文色婷婷| 亚洲国产精品嫩草影院久久| 亚洲AV成人无码久久精品老人| 色噜噜狠狠先锋影音久久| 人妻无码αv中文字幕久久琪琪布| 国内精品久久久久影院优| 久久se精品一区二区影院| 久久久老熟女一区二区三区| 欧美无乱码久久久免费午夜一区二区三区中文字幕| 久久99国产精品成人欧美| 婷婷国产天堂久久综合五月| 久久人人爽人人爽人人AV| 国产精品一区二区久久国产| 久久精品人人做人人爽电影| 久久国产热精品波多野结衣AV| 国内精品久久久久久野外| 模特私拍国产精品久久| 国产婷婷成人久久Av免费高清| 国产一区二区精品久久凹凸| 久久久久久久久久久| 伊人丁香狠狠色综合久久| 亚洲一区精品伊人久久伊人| 久久无码人妻一区二区三区| 一级做a爰片久久毛片16| 久久精品国产2020| 国产精品日韩深夜福利久久| 无码国产69精品久久久久网站| 久久亚洲国产精品一区二区| 久久99热这里只频精品6| 亚洲综合精品香蕉久久网97| 亚洲va久久久噜噜噜久久狠狠| 国产999精品久久久久久| 久久久久久亚洲Av无码精品专口 | 伊人 久久 精品| www亚洲欲色成人久久精品| 久久久久久久久无码精品亚洲日韩 |