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

建造者模式:

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

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;
}

执行结果如下:

时间: 2024-10-03 14:14:49

设计模式之九:建造者模式(Builder)的相关文章

Java学习笔记——设计模式之九.建造者模式

 建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: 1 package cn.happy.design_pattern._09builder; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Product { 7 8 List<String> parts = new ArrayList<>(); 9 10

设计模式 笔记 生成器(建造者)模式 Builder

//---------------------------15/04/08---------------------------- //builder 生成器(建造者)模式---对象创建型模式 /* 1:意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2:动机 3:适用性: 1>当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时. 2>当构造过程必须允许被构造的对象有不同的表示时. 4:结构: Director: builder--------

设计模式—建造者模式(Builder)

title: 设计模式-建造者模式 建造者模式(Builder)是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节.建造者模式属于对象创建型模式.我们获得一个对象的时候不是直接new这个对象出来,而是对其建造者进行属性设置,然后建造者在根据设置建造出各个对象出来.建造者模式又可以称为生成器模式. 模式结构 一个标准的建造者模式包含如下角色: Builder:抽象建造者 ConcreteBuilder:具体建造者 Director

说说设计模式~建造者模式(Builder)

返回目录 建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC何尝不是,我们的MVVM又何尝不是呢,我们做软件的,换肤是常有的事,其实换肤的实现不就是建造者模式最好的体现吗,呵呵. 定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 何时能用到它? 1 当创建复杂对象的算法应该独立于该对象的组成部分以

建造者模式&lt;Builder&gt;

概述 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式 角色 建造者(Builder):为创建一个产品对象的各个部件指定抽象接口. 具体建造者(ConcreteBuilder):实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口 产品(Product):表示被构造的复杂对象.ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最

设计模式学习04—建造者模式

一.动机与定义 创建对象时,我们知道可以使用工厂方式来创建,使调用者和具体实现解耦,但是有一种情况,当要创建的多个对象之间重复性较大,只有创建步骤.组装顺序或者内部构件不同时,工厂模式就需要进一步的演化了,如我们去KFC,有很多种套餐,比如套餐1(薯条+可乐+汉堡),套餐2(鸡肉卷+薯条+可乐),这个套餐就是我们要获取的复杂对象,那么程序如何创建出这种对象呢. 我们看到套餐的内容很多是一样的,那么我们是不是可以考虑将创建单个食品(如鸡肉卷.可乐等)方法提取出来,使用单独一个类协调这些食品的组合比

我的设计模式:从模版设计模式谈到建造者模式

1.模版设计模式  TemplateMethod Pattern 问题:创建模型,如何处理更好?有共性有异性,共性放在哪里(abstract)?异性放在哪里(实现)? 缺陷:暴露方法好吗?protected保护起来    方法不会被子类继承修改final更好 概念:模版中的方法(抽象方法.具体方法.钩子方法) 模版模式:重写父类的方法,再调用父类的方法产生不同的结果 具体方法一般体现在调用其他方法的顺序上 模版模式一定是继承来的 2.建造者模式  Builder Pattern 问题升级:继续添

设计模式五:建造者模式

建造者模式又称为生成器模式,它是一种较为复杂.使用频率也相对较低的创建型模式.建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品. 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式是一种对象创建型模式. //Actor角色类:复杂产品,考虑到代码的可读性,只列出部分成员属性,且成员属性的类型均为String,真实情况下,有些成员属性的类型需自定义 class Actor { private

C#设计模式之九组合模式(Composite Pattern)【结构型】

原文:C#设计模式之九组合模式(Composite Pattern)[结构型] 一.引言 今天我们要讲[结构型]设计模式的第四个模式,该模式是[组合模式],英文名称是:Composite Pattern.当我们谈到这个模式的时候,有一个物件和这个模式很像,也符合这个模式要表达的意思,那就是"俄罗斯套娃"."俄罗斯套娃"就是大的瓷器娃娃里面装着一个小的瓷器娃娃,小的瓷器娃娃里面再装着更小的瓷器娃娃,直到最后一个不能再装更小的瓷器娃娃的那个瓷器娃娃为止(有点绕,下面我会

建造者模式(Builder)——从组装电脑开始

建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电脑开始吧. 首先要买一个电脑,一般都有两个选择 -- 品牌电脑和组装电脑,一般人为了省事和放心都会选择买品牌电脑(也就是整机).在这里,为了更好的分析问题,假定我们为了性价比决定要买组装电脑.那么我们该怎么做呢. 首先我们得学习一个完整的电脑的组成部分有哪些? 经过翻查一部分资料发现,主要部件分为主