鱼儿慢慢游~~

导航

 

Builder-- 建造者模式:  将一个复杂对象的构建和表示分离, 使得同样的构建过程可以有不同的表示。  

从定义可以看出, builder模式有两个重要的点,

1. 构建与表示分离

2. 同样的构建过程有不同的表示。

这里可以看出,对于builder模式来说, 构建过程是相同的。而在构建过程中,根据不同的需求。构建出不同的对象。

建造者模式属于对象创建型模式, 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,

用户不需要知道内部的具体构建细节(即构建过程)

 

builder模式的UML图:

1. Director: 指挥者, 根据客户的提示, 决定构建使用哪种builder 构建产品

2. Builder: 抽象构建类,定义了构建的过程。

3. ConcreteBuilder: 实际的构建类,构建不同的产品

4. product: 需要构建的产品, 具体的构建类,将在每一步的时候,对产品的部分进行构造,最后完成。

 

builder模式的使用场景:

当创建复杂对象时,对象内部的的建造顺序是稳定的,但是当对象的每一个部件,都有着不同的变化,可以使用builder 模式。

 举例:

一家生意很好的饭店,最近遭到了竞争,他们观察对手,发现对手针对不同的人群推出了多种套餐,如套餐A: 绿豆面+红豆汤+萝卜丝  套餐B:凉皮+冰峰。 套餐C:鸡腿饭+可乐

老板观察后,决定也推出相应的套餐。并使用建造者模式,提高套餐生成效率

套餐= 主食+饮品+小吃

 1 class Waiter
 2 {
 3 private:
 4     BuildTaocan* _taocan;
 5 public:
 6     void setTaocan(BuildTaocan* tc)
 7     {
 8         this->_taocan = tc;
 9     }
10 
11     void Construct()
12     {
13         _taocan->addFood();
14         _taocan->addDrink();
15         _taocan->addsnacks();
16     }
17 
18 };
19 
20 class BuildTaocan
21 {
22     virtual void addFood();
23     virtual void addDrink();
24     virtual void addsnacks();
25     virtual void getTaocan();
26 };
27 
28 class BuildTaocanA
29 {
30 private:
31     TaoCan _tc;
32 public:
33     virtual    void getTaocan()
34     {
35         cout << "taocan a" << _tc.food() << _tc.Drink() << _tc.snacks() << endl;
36     }
37     virtual void addDrink()
38     {
39         tc.setDrink("hongdoutang");
40     }
41     virtual void addFood()
42     {
43         tc.setFood("lvdoumian");
44     }
45 };

client:

Waiter waiter();

BuildTaoCanA cana;

waiter.setTaocan(&cana);

waiter.Construct();

cana.getTaocan();

posted on 2016-07-22 17:14  miss_UU  阅读(169)  评论(0编辑  收藏  举报