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

    一、简介:

    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 }

  • 相关阅读:
    第十一周课程总结
    第十周学习总结
    第九周课程总结&实验报告(七)
    第八周课程总结&实验报告(六)
    第七周总结&第五次实验报告
    第六周学习总结&第四次实验报告
    课程总结
    第十四周课程总结&实验报告(简单记事本的实现)
    第十三周课程总结
    第十二周
  • 原文地址:https://www.cnblogs.com/bewolf/p/4233087.html
Copyright © 2011-2022 走看看