• 设计模式复习-建造者模式


    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    
    #pragma once
    #include "stdafx.h"
    #include<list>
    #include<string>
    #include<iostream>
    #include<windows.h>
    using namespace std;
    
    //设计模式-建造者模式 Builder
    
    //Product类-产品类,由多个部件组成。
    class Product {
    private:
    	list<string>mParts;
    public:
    	Product() {
    		mParts.clear();
    	}
    	VOID Add(string strPart) {
    		mParts.push_back(strPart);
    	}
    	VOID Show() {
    		cout << "产品创建" << endl;
    		for each(string index in mParts) {
    			cout << index << endl;
    		}
    	}
    };
    
    //Builder类-抽象建造者
    class Builder {
    public:
    	virtual VOID BuildPartA() = 0;
    	virtual VOID BuildPartB() = 0;
    	virtual Product* GetProduct() = 0;
    };
    
    //建造者1
    class ConcreteBuilder1 :public Builder {
    private:
    	Product * mpProduct = NULL;
    public:
    	ConcreteBuilder1() {mpProduct = new Product();}
    	~ConcreteBuilder1() {delete mpProduct;}
    
    	VOID BuildPartA() {
    		mpProduct->Add("部件A");
    	}
    	VOID BuildPartB() {
    		mpProduct->Add("部件B");
    	}
    	Product* GetProduct() {
    		return mpProduct;
    	}
    };
    
    //建造者2
    class ConcreteBuilder2 :public Builder {
    private:
    	Product * mpProduct = NULL;
    public:
    	ConcreteBuilder2() { mpProduct = new Product(); }
    	~ConcreteBuilder2() { delete mpProduct; }
    
    	VOID BuildPartA() {
    		mpProduct->Add("部件X");
    	}
    	VOID BuildPartB() {
    		mpProduct->Add("部件Y");
    	}
    	Product* GetProduct() {
    		return mpProduct;
    	}
    };
    
    //Director-指挥者类
    class Director {
    public:
    	VOID Construct(Builder *pConcreteBuilder) {
    		pConcreteBuilder->BuildPartA();
    		pConcreteBuilder->BuildPartB();
    	}
    };
    
    
    int main()
    {
    	Director *mDirector = new Director();
    	ConcreteBuilder1 * pBuilder1 = new ConcreteBuilder1();
    	ConcreteBuilder2 * pBuilder2 = new ConcreteBuilder2();
    	
    	mDirector->Construct(pBuilder1);
    	mDirector->Construct(pBuilder2);
    	Product *pProduct1 = pBuilder1->GetProduct();
    	Product *pProduct2 = pBuilder2->GetProduct();
    
    	pProduct1->Show();
    	pProduct2->Show();
    
    	delete mDirector;
    	delete pBuilder1, delete pBuilder2;
    	//delete pProduct1, delete pProduct2;
    
    	getchar();
    	return 0;
    }
    
    
  • 相关阅读:
    MySQL数据库返回影响行数的实际操作流程
    nslookup命令
    Mysql Strict Mode
    mysql表大小写
    Objective-C消息转发
    NSDateFormatter 和 NSDateComponents 的用法
    提交app的时候总是报出icon的错误
    IOS 的loadView 及使用loadView中初始化View注意的问题。(死循环并不可怕)
    [[NSMutableArray alloc] init];和[[NSMutableArray alloc] initWithCapacity:0]区别
    NSMutableArray初始化崩溃问题
  • 原文地址:https://www.cnblogs.com/csnd/p/12061917.html
Copyright © 2020-2023  润新知