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

    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();

    ~~~~~
  • 相关阅读:
    Candy leetcode java
    Trapping Rain Water leetcode java
    Best Time to Buy and Sell Stock III leetcode java
    Best Time to Buy and Sell Stock II leetcode java
    Best Time to Buy and Sell Stock leetcode java
    Maximum Subarray leetcode java
    Word Break II leetcode java
    Word Break leetcode java
    Anagrams leetcode java
    Clone Graph leetcode java(DFS and BFS 基础)
  • 原文地址:https://www.cnblogs.com/missmzt/p/5695761.html
Copyright © 2011-2022 走看看