建造者模式

时间:2022-04-26
本文章向大家介绍建造者模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、简介:

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

2、建造者模式通常包括下面几个角色:

(1)builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。

(2)ConcreteBuilder:继承builder类,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。

(3)Director:控制建造过程,用来隔离用户与建造过程的关联。

(4)Product:要创建的复杂对象。

个人感觉建造者模式有点像是像是工厂模式和策略模式的一个综合,先用builder生产product,然后用Director来指挥隔离与用户的耦合程度。

3、举例:设计一个设置游戏人物脸部特征的程序,其中眼睛、耳朵、鼻子、嘴、眉毛都是可以设置的Product

4、UML

5、所属类别:创建型

二、C++程序

  1 // 设计模式.cpp : 定义控制台应用程序的入口点。
  2 //
  3 
  4 #include "stdafx.h"
  5 #include<iostream>
  6 #include<string>
  7 using namespace std;
  8 //产品类
  9 class Product
 10 {
 11 private:
 12     string brow;
 13     string eyes;
 14     //string ears;
 15     //string nose;
 16     //string mouse;
 17 public:
 18     Product(){}
 19     ~Product(){}
 20     void set_brow(string b)
 21     {
 22         brow=b;
 23     }
 24     void set_eyes(string e)
 25     {
 26         eyes=e;
 27     }
 28     void show()
 29     {
 30         cout<<brow<<endl;
 31         cout<<eyes<<endl;
 32     }
 33 };
 34 //抽象建造者类
 35 class Builder
 36 {
 37 public:
 38     Builder(){}
 39     virtual ~Builder(){}
 40     virtual void build_brow()=0;
 41     virtual void build_eyes()=0;
 42     virtual Product * getresult()=0;
 43 };
 44 //具体造者类1
 45 class Conbuilder1:public Builder
 46 {
 47 private:
 48     Product* product;
 49 public:
 50     Conbuilder1()
 51     {
 52         product=new Product();
 53     }
 54     virtual ~Conbuilder1(){}
 55     virtual void build_brow()
 56     {
 57         product->set_brow("浓眉");
 58     }
 59     virtual void build_eyes()
 60     {
 61         product->set_eyes("丹凤眼");
 62     }
 63     virtual Product * getresult()
 64     {
 65         return product;
 66     }
 67 };
 68 //具体造者类2
 69 class Conbuilder2:public Builder
 70 {
 71 private:
 72     Product* product;
 73 public:
 74     Conbuilder2()
 75     {
 76         product=new Product();
 77     }
 78     virtual ~Conbuilder2(){}
 79     virtual void build_brow()
 80     {
 81         product->set_brow("柳叶眉");
 82     }
 83     virtual void build_eyes()
 84     {
 85         product->set_eyes("三角眼");
 86     }
 87     virtual Product * getresult()
 88     {
 89         return product;
 90     }
 91 };
 92 //指挥者
 93 class Director
 94 {
 95 public:
 96     Director(Builder * builder)
 97     {
 98         builder->build_brow();
 99         builder->build_eyes();
100     }
101     ~Director(){}
102 };
103 int _tmain(int argc, _TCHAR* argv[])
104 {
105     Conbuilder1 *conbuilder1=new Conbuilder1();
106     Director *director=new Director(conbuilder1);
107     Product * product1=conbuilder1->getresult();
108     product1->show();
109     return 0;
110 }