zoukankan      html  css  js  c++  java
  • [创建型模式] Builder

    Product.h

    //
    //  Product.h
    //  Builder
    //
    //  Created by Cheney Shen on 11-2-20.
    //  Copyright 2011年 __MyCompanyName__. All rights reserved.
    //
    
    #ifndef _PRODUCT_H_
    #define _PRODUCT_H_
    
    class Product
    {
        public:
        Product();
        
        ~Product();
        
        void ProducePart();
        
        protected:
        
        private:
        
    };
    
    class ProductPart
    {
        public:
        ProductPart();
        
        ~ProductPart();
        
        ProductPart* BuildPart();
        
        protected:
        
        private:
        
    };
    
    #endif  //~_PRODUCT_H_
    

    Product.cpp

    //
    //  Product.cpp
    //  Builder
    //
    //  Created by Cheney Shen on 11-2-20.
    //  Copyright 2011年 __MyCompanyName__. All rights reserved.
    //
    
    #include "Product.h"
    
    Product::Product()
    {
        
    }
    
    Product::~Product()
    {
        
    }
    
    ProductPart::ProductPart()
    {
        
    }
    
    ProductPart::~ProductPart()
    {
        
    }
    

    Builder.h

    //
    //  Builder.h
    //  Builder
    //
    //  Created by Cheney Shen on 11-2-20.
    //  Copyright 2011年 __MyCompanyName__. All rights reserved.
    //
    
    #ifndef _BUILDER_H
    #define _BUILDER_H
    
    #include <string>
    using namespace std;
    
    class Product;
    class Builder
    {
        public:
        virtual ~Builder();
        virtual void BuildPartA(const string& buildPara)=0;
        virtual void BuildPartB(const string& buildPara)=0;
        virtual void BuildPartC(const string& buildPara)=0;
        virtual Product* GetProduct()=0;
        
        protected:
        Builder();
        
        private:
        
    };
    
    class ConcreteBuilder: public Builder
    {
        public:
        ConcreteBuilder();
        ~ConcreteBuilder();
        void BuildPartA(const string& buildPara);
        void BuildPartB(const string& buildPara);
        void BuildPartC(const string& buildPara);
        Product* GetProduct();
        
        protected:
        
        private:
        
    };
    
    #endif  //~_BUILDER_H
    

    Builder.cpp

    //
    //  Builder.cpp
    //  Builder
    //
    //  Created by Cheney Shen on 11-2-20.
    //  Copyright 2011年 __MyCompanyName__. All rights reserved.
    //
    
    #include "Builder.h"
    #include "Product.h"
    #include <iostream>
    using namespace std;
    
    Builder::Builder()
    {
        
    }
    
    Builder::~Builder()
    {
        
    }
    
    ConcreteBuilder::ConcreteBuilder()
    {
        
    }
    
    ConcreteBuilder::~ConcreteBuilder()
    {
        
    }
    
    void ConcreteBuilder::BuildPartA(const string& buildPara)
    {
        cout<<"Step1:BuildPartA..."<<buildPara<<endl;
    }
    
    void ConcreteBuilder::BuildPartB(const string& buildPara)
    {
        cout<<"Step2:BuildPartB..."<<buildPara<<endl;
    }
    
    void ConcreteBuilder::BuildPartC(const string& buildPara)
    {
        cout<<"Step3:BuildPartC..."<<buildPara<<endl;
    }
    
    Product* ConcreteBuilder::GetProduct()
    {
        BuildPartA("pre-defined");
        BuildPartB("pre-defined");
        BuildPartC("pre-defined");
        return new Product();
    }
    

    Director.h

    //
    //  Director.h
    //  Builder
    //
    //  Created by Cheney Shen on 11-2-20.
    //  Copyright 2011年 __MyCompanyName__. All rights reserved.
    //
    
    #ifndef _DIRECTOR_H_
    #define _DIRECTOR_H_
    
    class Builder;
    class Director
    {
        public:
        Director(Builder* hld);
        ~Director();
        void Construct();
        
        protected:
        
        private:
        Builder* _bld;
    };
    
    #endif  //~_DIRECTOR_H_
    

    Director.cpp

    //
    //  Director.cpp
    //  Builder
    //
    //  Created by Cheney Shen on 11-2-20.
    //  Copyright 2011年 __MyCompanyName__. All rights reserved.
    //
    
    #include "Director.h"
    #include "Builder.h"
    
    Director::Director(Builder* bld)
    {
        _bld = bld;
    }
    
    Director::~Director()
    {
        
    }
    
    void Director::Construct()
    {
        _bld->BuildPartA("user-defined");
        _bld->BuildPartB("user-defined");
        _bld->BuildPartC("user-defined");
    }
    

    main.cpp

    //
    //  main.cpp
    //  Builder
    //
    //  Created by Cheney Shen on 11-2-20.
    //  Copyright 2011年 __MyCompanyName__. All rights reserved.
    //
    
    #include "Builder.h"
    #include "Product.h"
    #include "Director.h"
    #include <iostream>
    using namespace std;
    
    int main (int argc, const char * argv[]) {
    
        Director* d = new Director(new ConcreteBuilder());
        
        d->Construct();
        
        return 0;
    }
    
  • 相关阅读:
    RF04 Variables
    RF06 Settings
    RF05 Keywords
    Nginx介绍
    javascript中的迷惑点
    javascript中的undefined和null
    常见博客网站的robots.txt
    CSS层叠样式表
    web前端校验
    了解javascript
  • 原文地址:https://www.cnblogs.com/shenfei2031/p/1979305.html
Copyright © 2011-2022 走看看