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 }
  • 相关阅读:
    Asp.Net Web API 2第八课——Web API 2中的属性路由
    Asp.Net Web API 2第七课——Web API异常处理
    Asp.Net Web API 2第六课——Web API路由和动作选择
    Asp.Net Web API 2第五课——Web API路由
    开始学习python
    BMI 小程序 购物车
    深浅copy 文件操作
    字典 dict 集合set
    基本数据类型 (str,int,bool,tuple,)
    python 运算符
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9285762.html
Copyright © 2011-2022 走看看