zoukankan      html  css  js  c++  java
  • C++设计模式之-建造者模式

    建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP)。《大话设计模式》举了一个很好的例子——建造小人,一共需建造6个部分,头部、身体、左右手、左右脚。与工厂模式不同,建造者模式是在导向者的控制下一步一步构造产品的。建造小人就是在控制下一步步构造出来的。创建者模式可以能更精细的控制构建过程,从而能更精细的控制所得产品的内部结构。

    代码如下:

     1 // Director.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream>
     6 #include <string>
     7 using namespace std;
     8 
     9 class Builder  
    10 
    11 {
    12 
    13 public:
    14     virtual void BuildHead() {}
    15     virtual void BuildBody() {}
    16     virtual void BuildLeftArm(){}
    17     virtual void BuildRightArm() {}
    18     virtual void BuildLeftLeg() {}
    19     virtual void BuildRightLeg() {}
    20 };
    21 
    22 //构造瘦人
    23 
    24 class ThinBuilder : public Builder
    25 {
    26 public:
    27     void BuildHead() { cout<<"build thin body"<<endl; }
    28     void BuildBody() { cout<<"build thin head"<<endl; }
    29     void BuildLeftArm() { cout<<"build thin leftarm"<<endl; }
    30     void BuildRightArm() { cout<<"build thin rightarm"<<endl; }
    31     void BuildLeftLeg() { cout<<"build thin leftleg"<<endl; }
    32     void BuildRightLeg() { cout<<"build thin rightleg"<<endl; }
    33 
    34 };
    35 
    36 //构造胖人
    37 class FatBuilder : public Builder
    38 {
    39 public:
    40     void BuildHead() { cout<<"build fat body"<<endl; }
    41     void BuildBody() { cout<<"build fat head"<<endl; }
    42     void BuildLeftArm() { cout<<"build fat leftarm"<<endl; }
    43     void BuildRightArm() { cout<<"build fat rightarm"<<endl; }
    44     void BuildLeftLeg() { cout<<"build fat leftleg"<<endl; }
    45     void BuildRightLeg() { cout<<"build fat rightleg"<<endl; }
    46 };
    47 
    48 //构造的指挥官
    49 class Director  
    50 {
    51 private:
    52     Builder *m_pBuilder;
    53 public:
    54     Director(Builder *builder) { m_pBuilder = builder; }
    55     void Create(){
    56         m_pBuilder->BuildHead();
    57         m_pBuilder->BuildBody();
    58         m_pBuilder->BuildLeftArm();
    59         m_pBuilder->BuildRightArm();
    60         m_pBuilder->BuildLeftLeg();
    61         m_pBuilder->BuildRightLeg();
    62     }
    63 };
    64 int _tmain(int argc, _TCHAR* argv[])
    65 {
    66     FatBuilder *thin = new FatBuilder();
    67     Director *director = new Director(thin);
    68     director->Create();
    69     system("pause");    
    70     return 0;
    71 }
  • 相关阅读:
    SQL查询语句精华使用简要
    配置文件中映射元素详解
    从软件工程师到IT猎头:我的一点经历和感触
    配置文件中映射元素详解
    SQL查询语句精华使用简要
    从软件工程师到IT猎头:我的一点经历和感触
    谈谈对软件项目成员的业绩考核
    谈谈对软件项目成员的业绩考核
    五十条经典的做人哲学
    Ubuntu 12.10使用心得
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9285762.html
Copyright © 2011-2022 走看看