建造者模式之C++实现

说明:本文仅供学习交流,转载请标明出处。欢迎转载!

  建造者模式(Builder)也叫生成器模式,我们都知道。假设我们想完毕一个复杂产品的创建过程,我们必须分开创建。再组装。

比方说自行车,有铁架、车铃、车座、轮胎、钢圈

假设我们须要组装一个自行车,必须有这些东西,从创建者模式的角度分析。我们把自行车视为“产品”。把铁架、车铃、车座...等视为“部件”。而不同的部件的价格和性能也表现不一样。所以我们再组装前必须依据实际情况来选择对应的部件,这个过程我们能够总结为:在选择详细的部件之后进行组装,得到我们预期的自行车

通过以上分析后。给出建造者模式定义:

建造者模式:将一个复杂对象的构建和它的表示分离,使得相同的构建过程能够创建不同的表示。

对上面的定义中给出两点说明:

1.对象的表示:宏观概念,构建对象我们须要做些什么?(做什么

2.对象的构建:微观观念。构建对象我们应该怎么做?(怎么做

建造者模式的结构图

本图来自《大话设计模式》

C++实现代码:

#include<iostream>
#include<list>
#include<string>
#include<algorithm>//for_each(b,e,Fun)
using namespace std;

template<typename T>
struct ShowFun//定义一个仿函数,供for_each函数使用
{
	void operator()(T t)
	{
		cout<<t<<endl;
	}
};
class Product//详细产品类
{
private:
	list<string> parts;
public:
	void Add(string part)//为产品加入部件
	{
		parts.push_back(part);
	}
	void Show()//显示产品的各个部件
	{
		cout<<endl<<"产品 创建----"<<endl;
		for_each(parts.begin(),parts.end(),ShowFun<string>());//输出产品
	}
};

class Builder//抽象建造者
{
public:
	virtual void BuildPartA()=0;//创建部件A
	virtual void BuildPartB()=0;//创建部件B
	virtual Product GetResult()=0;//返回加入部件后得到的产品的结果
};
class ConcreteBuilder1:public Builder//详细建造者1,注意C++默认的继承方式为private
{
private:
	Product p;//内置产品类,聚合关系
public:
	void BuildPartA()//加入部件A
	{
		p.Add("部件A");
	}
	void BuildPartB()//加入部件B
	{
		p.Add("部件B");
	}
	Product GetResult()//返回产品对象
	{
		return p;
	}
};

class ConcreteBuilder2:public Builder//详细建造者2
{
private:
	Product p;//内置产品类。聚合关系
public:
	void BuildPartA()//加入部件A
	{
		p.Add("部件X");
	}
	void BuildPartB()//加入部件B
	{
		p.Add("部件Y");
	}
	Product GetResult()//返回产品对象
	{
		return p;
	}
};
class Director//管理者类个,依据用户的需求创建小人对象
{
public:
	void Construct(Builder& b)//用引用实现多态
	{
		b.BuildPartA();
		b.BuildPartB();
	}
};
int main()
{
	Director director;
	/********建造者1**********/
	Builder &b1=ConcreteBuilder1();
	director.Construct(b1);//创建
	b1.GetResult().Show();//显示上面创建的产品

	/*******创建这2*******/
	Builder &b2=ConcreteBuilder2();
	director.Construct(b2);
	b2.GetResult().Show();//显示上面创建的产品
	return 0;
}

測试结果

       

參考资料:

[1]《大话设计模式》

[2]《设计模式之禅》

[3]《HeadFirst设计模式》

时间: 2024-12-28 16:31:24

建造者模式之C++实现的相关文章

Java设计模式学习笔记,三:建造者模式

建造者模式:实现了构建和装配的解耦,即对象的各个子组件单独构建,再进行装配,从而建造完整对象. 该模式适用于构建较为复杂的对象(多个子组件). 不同的构建者,使用相同的装配者,可以建造不同的对象实例.相同的构建者,不同的装配顺序,也可能建造出不同的对象实例. 举例: 汽车对象,子组件包括引擎.轮子和车体. Audi汽车构建者,负责制造Audi牌各个子组件.BMW汽车构建者,负责制造BMW牌各个子组件.然后将子组件统一送至汽车装配者的生产线中进行组装,最后会建造出Audi牌汽车和BMW汽车. 以下

【2016-10-16】【坚持学习】【Day7】【建造者模式】

建造者模式: 一个复杂的对象由多个分部件组成.一个复杂对象 class Product { private string partA; //定义部件,部件可以是任意类型,包括值类型和引用类型 private string partB; private string partC; public string PartA { get { return partA; } set { partA = value; } } public string PartB { get { return partB;

设计模式那点事读书笔记(3)----建造者模式

建造者模式: 建造者模式是将复杂的对象构造进行分离,使得每个部件完成比较独立的工作.通过抽象类,接口来约束建造的过程. 解决什么问题: 当生成的产品对象内部具有复杂的结构. 当复杂对象需要与表示分离,可能需要创建不同的表示时. 当需要向客户隐藏产品内部结构表现时. UML: 代码结构: 商品的实体: package com.demo.builder.model; /** * 产品实体 */ public class MobilePackage { private float money; pri

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

建造者模式

上一次学习了工厂模式,这一学习了建造者模式,对于建造者来说,抽象出来的建筑流程是确定的,往往建筑一座楼房包括下面的步骤:(1)打桩,建立基础(2)建立框架等.建造者模式的本质和建造楼房是一致的:即流程不变,但每个流程实现的具体细节则是经常变化的.建造者模式的好处就是保证了流程不会变化,流程即不会增加.也不会遗漏或者产生流程次序错误,这是非常重要的. 这次代码构思如下: 接下来是代码展示: Client: using System;using System.Collections.Generic;

小菜学设计模式——建造者模式

背景 不要小看炒菜这件小事上,想要上一道佳肴,那是需要循规蹈矩,步步小心的.我相信你肯定在外面吃过没放盐的快餐,吃过放多了盐的快餐.....既然炒菜是一个如此复杂的过程,又必须循规蹈矩,那为什么不给他一个死规定呢?如果谁没有按照规定做事,就进行对应的提醒警告.这就是建造者模式的由来,限制规则步骤,但是开发规则细节.比如说盛菜之前必须放盐,那么规定一定要放盐,具体放多少自己论情况而定. 1.使用意图 如果你需要将一个复杂对象的构建与它的表示(构建具体过)分离,使得同样的构建过程可以创建不同的表示的

建造者模式(Builder)

定义 (本人在阅读完本书的中英两个版本之后发现对建造者模式十窍懂了九窍,所以直接去网上搜别人的分析了,所以本章大部分是根据网上的资料收集来的,此外,代码例子表示本书的例子不合适,也换了,所以本章和这本书关系不大.) 建造者模式是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.建造者模式最重要的两个角色:抽象建造者(Builder)和指导者(Director),其中建造者知道怎么(How)去建造产品,而指导者知道去制造什么(What)产品,建造者模式用建房子的例子来说明

【设计模式】建造者模式

1.定义 1.1 标准定义 建造者模式( Builder Pattern) 也叫做生成器模式, 其定义如下: Separate the construction of a complex object from its representation so that the same construction process can create different representations.( 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示. ) 1.2  通用

设计模式—建造者模式

1 建造者模式  将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 建造者返回给客户一个完整的产品对象,而客户端无须关心该对象所包含的属性和组建方式,这就是建造者模式的设计动机. 2  模式解析 建造者模式通常包括下面几个角色: 1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造.这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建. 2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复

23种设计模式--建造者模式-Builder Pattern

一.建造模式的介绍       建造者模式就是将零件组装成一个整体,用官方一点的话来讲就是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示.生活中比如说组装电脑,汽车等等这些都是建造者模式的具体体现,组装电脑反应到软件上就是一个复杂的对象,然后我们使用建造者模式的时候需要抽象一个建造类,抽象一个指挥者指挥具体实现的那个类,然后就是具体实现这个对象的类,这样就避免了每新创建一个不同的复杂对象就需要重新写一下这个类,这样就只要重写建造者就可以了,我们接下来就用组装电脑这个来说明一