zoukankan      html  css  js  c++  java
  • 建造者模式

    建造者模式:将一个复杂对象的构建与它的表示分离,是的同样的构建过程可以创建不同的表示。

    说白了,就是 不同对象的表现不同(如 香辣鸡腿堡、虾堡等),但创建流程是相同的(如 烤汉堡的流程相同),那么将创建流程进行抽象。目的是防止某个对象创建时缺失某个步骤,导致对象不完整(如新增奥尔良鸡腿堡,创建时,忘记放沙拉酱)。使用建造者模式,保证了建造流程的稳定,在具体子类中实现流程中各个环节的特殊变化。

    一、UML结构图

    二、建造胖人、瘦人示例

    建造胖人、瘦人时,头、胳膊、腿各个流程相对稳定,但是胖瘦不稳定。

      1 #include <iostream>
      2 #include <vector>
      3 #include <string>
      4  
      5 using namespace std;
      6 //Product类
      7 class Product
      8 {
      9     vector<string> parts;
     10 public:
     11     void Add(const string part)
     12     {
     13         parts.push_back(part);
     14     }
     15     void Show()const
     16     {
     17         for(int i = 0 ; i < parts.size() ; i++)
     18         {
     19             cout<<parts[i]<<endl;
     20         }
     21     }
     22 };
     23 //抽象builder类
     24 class Builder
     25 {
     26 public:
     27     virtual void BuildHead() = 0;
     28     virtual void BuildBody() = 0;
     29     virtual void BuildHand() = 0;
     30     virtual void BuildFeet() = 0;
     31     virtual Product GetResult() = 0; 
     32 };
     33 //具体胖人创建类
     34 class FatPersonBuilder :public Builder
     35 {
     36 private:
     37     Product product;
     38 public:
     39     virtual void BuildHead()
     40     {
     41         product.Add("胖人头");//创建瘦人的头
     42     }
     43     virtual void BuildBody()
     44     {
     45         product.Add("胖人身体");//创建瘦人的身体
     46     }
     47     virtual void BuildHand()
     48     {
     49         product.Add("胖人手");//创建瘦人的手
     50     }
     51     virtual void BuildFeet()
     52     {
     53         product.Add("胖人脚");//创建瘦人的脚
     54     }
     55     virtual Product GetResult()
     56     {
     57         return product;
     58     }
     59 };
     60 //具体瘦人人创建类
     61 class ThinPersonBuilder :public Builder
     62 {
     63 private:
     64     Product product;
     65 public:
     66     virtual void BuildHead()
     67     {
     68         product.Add("瘦人人头");//创建瘦人的头
     69     }
     70     virtual void BuildBody()
     71     {
     72         product.Add("瘦人身体");//创建瘦人的身体
     73     }
     74     virtual void BuildHand()
     75     {
     76         product.Add("瘦人手");//创建瘦人的手
     77     }
     78     virtual void BuildFeet()
     79     {
     80         product.Add("瘦人脚");//创建瘦人的脚
     81     }
     82     virtual Product GetResult()
     83     {
     84         return product;
     85     }
     86 };
     87 //Director类
     88 class Director
     89 {
     90 public:
     91     void Construct(Builder &builder)
     92     {
     93         builder.BuildHead();
     94         builder.BuildBody();
     95         builder.BuildHand();
     96         builder.BuildFeet();
     97     }
     98 };
     99 
    100 int main()
    101 {
    102     Director *director = new Director();
    103     Builder *b1 = new FatPersonBuilder();
    104     Builder *b2 = new ThinPersonBuilder();
    105 
    106     director->Construct(*b1);
    107     Product p1 = b1->GetResult();
    108     p1.Show(); 
    109     return 0;
    110 }
    示例代码
  • 相关阅读:
    Django集成CAS
    JAVA命名规范
    Mybatis(5)——动态SQL
    Mybatis(4)——ResultMap
    Mybatis(3)——参数处理
    Mybatis(2)——Mapper映射文件
    Mybatis(1)——配置文件
    Gson(http://www.jianshu.com/p/e740196225a4)
    Gson中fromJson方法
    SessionAttributes和ModelAttribute
  • 原文地址:https://www.cnblogs.com/qiupiaohujie/p/11969436.html
Copyright © 2011-2022 走看看