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

建造者模式

概念

  • 建造者模式(Builder Pattern),将一个复杂对象的构建与它的 表示(变化) 分离,使得 同样的构建过程(稳定) 可以创建不同的表示

GOF的UML图

在这里插入图片描述

  • Builder(抽象建造者):为创建一个产品对象的步骤提供抽象接口。
  • ConcreteBuilder(具体建造者):实现 Builder 的接口,实现该产品的各个步骤的具体实现细节
  • Director(指示器):指示ConcreteBuilder完成构建产品的框架步骤(稳定)。
  • Product(产品):表示被构造的复杂对象。

那么如何理解这个建造者模式?
假设现在有一个人的类,人的属性有性别、名字、年龄。那么当我们想创建一个人并且赋予他具体的属性,那么我们一般需要分为三步
1.设置性别
2.设置名字
3.设置年龄
这三步可以理解为构造的过程框架(稳定),但是想要实现具体的属性时,比如男性或者女性,具体的实现细节是变化的

那么我们就可以通过建造者模式实现
1.创建一个抽象建造者,提供实现步骤的接口(稳定
2.派生出具体的建造者,比如女性建造者、男性建造者。通过虚函数重写,实现具体的实现细节(变化
3.创建一个指示器,实现具体的构建框架(稳定),需要将具体的建造者传入指示器,建造者就会按照指示器的构造框架创建出对应的对象。

优缺点

优点:

  • 使用建造者模式可以使客户端不必知道产品内部组成的细节。
  • 建造者独立,易于扩展
  • 便于控制细节风险,因为实现的细节是独立开的

缺点:

  • 创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
  • 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大

适用场景

核心:建造模式中,强调的是固定整体构建的算法,而灵活扩展和切换部件的具体构造和产品装配的方式

  • 生成的对象具有复杂的内部结构,且这个结构是稳定的
  • 不同配置的构建对象,产生不同结果时。
  • 相同的构建过程,不同的执行顺序,产生不同结果时。

具体实例

首先创建一个 人的类,具体性别、名字、年龄等属性

#ifndef _HUMAN_H
#define _HUMAN_H
#include <iostream>
#include <string>
using namespace std;

//人类
class Human
{
   
public:
	Human(){
   };
	~Human(){
   };

	void SetSex(string sex){
    this->m_sex = sex; }
	void SetName(string name){
    this-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值