1、建造者模式UML
图1. 建造者模式UML
2、C++实现
C++实现类视图:
图2. 建造者模式C++实现的类视图
其中,Product的实现代码是(ProductA和ProductB的代码不再列出):
1 //产品抽象基类。
2 //三个属性的先后赋值顺序代表着不同产品的建立。
3 class Product
4 {
5 private:
6 std::string attribute1;
7 std::string attribute2;
8 std::string attribute3;
9
10 public:
11 Product();
12 ~Product();
13 };
Builder实现代码是:
1 //建造者抽象基类。
2 class Builder
3 {
4 public:
5 Builder();
6 ~Builder();
7
8 //声明的3个为Product的三个属性赋值的函数。
9 virtual void OperateStep1() = 0;
10 virtual void OperateStep2() = 0;
11 virtual void OperateStep3() = 0;
12
13 //返回建立好的Product对象。
14 virtual Product * GetResult() = 0;
15
16 };
ConcreteBuilderA的实现代码是:
1 class ConcreteBuilderA :
2 public Builder
3 {
4 private:
5 ProductA * pa;
6
7 public:
8 ConcreteBuilderA() { pa = new ProductA();}
9 ~ConcreteBuilderA();
10
11 //函数中是赋值语句,可按具体的产品对象的赋值顺序赋值。
12 void OperateStep1() { pa->setAttribute1(""); }
13 void OperateStep2() { pa->setAttribute2(""); }
14 void OperateStep3() { pa->setAttribute3(""); }
15
16 //返回建立好的ProductA对象。
17 Product * GetResult() { return pa; }
18 };
ConcreteBuilderB的实现代码是:
1 //具体建造者类,建立ProductB的对象,并为ProductB的属性赋值。
2 class ConcreteBuilderB :
3 public Builder
4 {
5 private:
6 ProductB * pb;
7
8 public:
9 ConcreteBuilderB() { pb = new ProductB(); }
10 ~ConcreteBuilderB();
11
12 //函数中是赋值语句,可按具体的产品对象的赋值顺序赋值。
13 void OperateStep1() { pb->setAttribute3(""); }
14 void OperateStep2() { pb->setAttribute2(""); }
15 void OperateStep3() { pb->setAttribute1(""); }
16
17 //返回建立好的ProductA对象。
18 Product * GetResult() { return pb; }
19
20 };
Director的实现代码是:
1 //建造者模式中的监督类。
2 //向外提供接口,向内定义建造顺序。
3 class Director
4 {
5 private:
6 Builder * builder;
7
8 public:
9 //按得到的不同的对象,进行不同顺序的建造。
10 Director(Builder &b);
11 ~Director();
12
13 //具体的监督方法。
14 Product * GetResult();
15 };
16
17
18 Director::Director(Builder &b)
19 {
20 builder = &b;
21 }
22
23 //方法中的调用顺序固定,建造顺序可在不同的Builder对象设置。
24 Product * Director::GetResult()
25 {
26 builder->OperateStep1();
27 builder->OperateStep2();
28 builder->OperateStep3();
29
30 return builder->GetResult();
31 }//end method GetResult
3、Java实现
Java实现的类视图
图3. 建造者模式的Java实现的类视图
其中,Product的实现代码是(ProductA和ProductB的代码不再列出):
1 public class Product {
2
3 private String attribute1;
4 private String attribute2;
5 private String attribute3;
6
7 }//end class Product
Builder的实现代码是:
1 public abstract class Builder {
2
3 //三个为产品属性赋值的方法。
4 //三个方法按相应产品必要的顺序赋值。
5 public abstract void OperateStep1();
6 public abstract void OperateStep2();
7 public abstract void OperateStep3();
8
9 //一个返回具体产品对象的方法。
10 public abstract Product GetResult();
11
12 }//end class Builder
ConcreteBuilderA的实现代码是:
1 //具体建造者,负责生产ProductA的对象。
2 public class ConcreteBuilderA extends Builder {
3
4 private ProductA pa;
5
6 public ConcreteBuilderA() {
7 // TODO Auto-generated constructor stub
8 this.pa = new ProductA();
9 }//end method ConcreteBuilderA
10
11 //为产品A中的属性attribute1赋值。
12 @Override
13 public void OperateStep1() {
14 // TODO Auto-generated method stub
15 this.pa.setAttribute1("这是ProductA的属性attribute1的值:A1");
16
17 System.out.println(this.pa.getAttribute1());
18 }//end method OperateStep1
19
20 //为产品A中的属性attribute2赋值。
21 @Override