设为首页 加入收藏

TOP

建造者(生成器)模式C++、Java实现(一)
2017-10-10 15:08:15 】 浏览:1309
Tags:建造 成器 模式 Java 实现

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
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇微服务~分布式事务里的最终一致性 下一篇一个简单的通讯服务框架(大家发..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目