• <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)  編輯 收藏 引用
            香蕉久久影院| 国产69精品久久久久久人妻精品| 国产亚洲精品美女久久久| 国产成人无码精品久久久性色| 一本久久知道综合久久| 久久久精品午夜免费不卡| 久久嫩草影院免费看夜色| 久久久久久综合网天天| 2020久久精品国产免费| 无码人妻久久一区二区三区蜜桃| 久久青青草原亚洲av无码app | 九九久久精品无码专区| 精品久久久久成人码免费动漫 | 天堂久久天堂AV色综合| 99久久婷婷免费国产综合精品| 国产精品伊人久久伊人电影 | 7777精品久久久大香线蕉| 久久国产精品99精品国产987| 欧美久久久久久| 色综合久久88色综合天天| 日产精品久久久久久久性色| 日产久久强奸免费的看| 国产福利电影一区二区三区,免费久久久久久久精 | 精品久久久久久99人妻| 久久久久久久久无码精品亚洲日韩| 欧美日韩中文字幕久久久不卡| 97久久精品人妻人人搡人人玩| 久久久久久精品成人免费图片| 久久久久婷婷| 久久精品这里只有精99品| 66精品综合久久久久久久| 97久久久久人妻精品专区| 久久久亚洲欧洲日产国码aⅴ| 久久夜色精品国产噜噜麻豆 | 国产精品久久久久免费a∨| 久久国产影院| 久久精品亚洲福利| 欧美国产精品久久高清| 亚洲精品乱码久久久久久不卡| 亚洲国产精品成人AV无码久久综合影院 | 欧洲人妻丰满av无码久久不卡|