设计模式之九:建造者模式(Builder)

来源:互联网 发布:c语言sqrt函数 编辑:程序博客网 时间:2024/05/17 07:22

建造者模式:
将一个复杂对象的建造过程和它的表示分离开来,这样相同的建造过程可以创建不同的表示。

Separate the construction of a complex object from its representation so that the same construction process can create different representations.

通俗一点就是如果流程是一样的,可以将这些流程抽象成一个类的一些接口,具体的创建过程可以在这个抽象类的子类中来实现。

C++中这个特性主要就是使用纯虚函数来实现。

UML图:

这里写图片描述

主要包括:

  1. Builder:指定了一个创建Product的一系列的接口。
  2. ConcreteBuilder:通过实现Builder中的接口具体实现了创建的步骤
  3. Director:定义了一个Buidler对象的引用来使用Builder的接口
  4. Product:表示需要创建的对象,ConcreteBuilder创建这个对象的每一部分。

具体的C++代码如下:

#include <iostream>#include <stdlib.h>#include <stdio.h>#include <list>#include <string>using namespace std;class Product{        public:                void addPart(string str)                {                    parts.push_back(str);                }                list<string>& getParts()                {                    return parts;                }        private:                list<string> parts;};class Builder{    public:            Builder()            {                product=new Product();            }            virtual void buildPart1()=0;            virtual void buildPart2()=0;            void getResult()            {                list<string>::iterator iter=product->getParts().begin();                for(;iter!=product->getParts().end();iter++)                {                    std::cout<<*iter<<std::endl;                }            }            virtual ~Builder()            {                if(!product)                        delete product;            }        protected:            Product *product;};class ConcreteBuilder1:public Builder{        public:            void buildPart1()            {                product->addPart("part one");            }            void buildPart2()            {                product->addPart("part two");            }};class ConcreteBuilder2:public Builder{        public:            void buildPart1()            {                product->addPart("part X");            }            void buildPart2()            {                product->addPart("part Y");            }};class Director{    public:            Director()            {            }            Director(Builder * b):build(b)            {            }            void construct()            {                build->buildPart1();                build->buildPart2();                build->getResult();            }    private:            Builder *build;};int main(){    std::cout<<"建造者模式测试"<<std::endl;    ConcreteBuilder1* cb1=new ConcreteBuilder1();    Director d1(cb1);    d1.construct();    ConcreteBuilder2 * cb2=new ConcreteBuilder2();    Director d2(cb2);    d2.construct();    return 0;}

执行结果如下:

这里写图片描述

0 0
原创粉丝点击