当前位置: 首页 > wzjs >正文

网站建设与管理专业实训室app推广联盟

网站建设与管理专业实训室,app推广联盟,wordpress外观插件,福州网站建设推广公司目录 引言 一、Builder 模式概述 二、Builder 模式举例 三、Builder 模式的结构 四、Builder 模式的实现 五、Builder 模式的优缺点 六、总结 引言 Builder 模式是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离。通过一步步构建对象,…

目录

引言

一、Builder 模式概述

二、Builder 模式举例

三、Builder 模式的结构

四、Builder 模式的实现

五、Builder 模式的优缺点

六、总结


引言

        Builder 模式是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离。通过一步步构建对象,Builder 模式允许在构建过程中引入参数,从而生成不同的对象表示。本文将通过理论讲解和代码示例,深入探讨 Builder 模式的核心思想、适用场景及其实现方式。

一、Builder 模式概述

核心思想
        Builder 模式的核心思想是将复杂对象的构建过程分解为多个步骤,并通过一个指导者(Director)对象来协调这些步骤。这样做的好处是:
        构建过程与表示分离:对象的构建过程独立于其最终表示,使得相同的构建过程可以生成不同的对象。
        灵活性:通过在每一步骤中引入参数,可以灵活地调整对象的构建过程。

适用场景
Builder 模式适用于以下场景:
        需要创建的对象非常复杂,由多个部分组成。
        对象的构建过程需要分步骤进行,且每个步骤可能需要不同的参数。
        希望将对象的构建过程与其表示分离,以便生成不同的对象表示。

二、Builder 模式举例

建造一栋房屋是一个复杂的过程,通常分为多个步骤,例如:
        (1)打地基:为房屋奠定基础。
        (2)搭建框架:构建房屋的主体结构。
        (3)安装水电:布置水管、电线等基础设施。
        (4)装修:进行内部和外部的装饰。

每个步骤都需要不同的材料和工艺,且可以根据需求进行调整。例如,地基的深度、框架的材料、装修的风格等都可以根据房屋的用途和预算进行定制。


在房屋建造过程中,Builder 模式可以很好地发挥作用:
        分步骤构建:将房屋的建造过程分解为多个步骤(如打地基、搭建框架等),每个步骤由专门的工人或团队负责。
        参数化构建:在每个步骤中引入不同的参数(如材料选择、设计风格等),从而生成不同的房屋。
        统一管理:通过一个总指挥(Director)来协调各个步骤,确保房屋的建造过程有序进行。


通过 Builder 模式,相同的建造过程可以生成不同的房屋。例如:
        经济型房屋:使用低成本材料,简化装修。
        豪华型房屋:使用高端材料,精心设计装修。
        环保型房屋:采用绿色建材,注重节能设计。


Builder 模式解决的问题与此类似:当我们需要创建的对象非常复杂时,可以通过分步骤构建对象,并在每一步骤中引入参数,从而生成不同的对象表示。

三、Builder 模式的结构

典型结构图


Builder 模式的典型结构包括以下几个角色:
        Product(产品):最终要构建的复杂对象。
        Builder(构建者):定义构建对象的各个步骤的接口。
        ConcreteBuilder(具体构建者):实现 Builder 接口,完成对象的具体构建。
        Director(指导者):负责调用 Builder 的步骤,控制对象的构建过程。

关键点
        分步骤构建:Builder 模式通过分步骤构建对象,使得构建过程更加清晰和可控。
        参数化构建:在每一步骤中引入参数,可以生成不同的对象表示。

四、Builder 模式的实现

代码示例
        以下是一个简单的 Builder 模式实现示例,展示了如何分步骤构建一个复杂对象。


产品类定义

// Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_class Product {
public:Product();~Product();void ProducePart();
protected:
private:
};class ProductPart {
public:ProductPart();~ProductPart();ProductPart* BuildPart();
protected:
private:
};#endif // ~_PRODUCT_H_

构建者类定义

// Builder.h
#ifndef _BUILDER_H_
#define _BUILDER_H_
#include <string>
using namespace std;class Product;class Builder {
public:virtual ~Builder();virtual void BuildPartA(const string& buildPara) = 0;virtual void BuildPartB(const string& buildPara) = 0;virtual void BuildPartC(const string& buildPara) = 0;virtual Product* GetProduct() = 0;
protected:Builder();
private:
};class ConcreteBuilder : public Builder {
public:ConcreteBuilder();~ConcreteBuilder();void BuildPartA(const string& buildPara);void BuildPartB(const string& buildPara);void BuildPartC(const string& buildPara);Product* GetProduct();
protected:
private:
};#endif // ~_BUILDER_H_

构建者类实现

// Builder.cpp
#include "Builder.h"
#include "Product.h"
#include <iostream>
using namespace std;Builder::Builder() {}
Builder::~Builder() {}ConcreteBuilder::ConcreteBuilder() {}
ConcreteBuilder::~ConcreteBuilder() {}void ConcreteBuilder::BuildPartA(const string& buildPara) {cout << "Step1: Build PartA..." << buildPara << endl;
}void ConcreteBuilder::BuildPartB(const string& buildPara) {cout << "Step2: Build PartB..." << buildPara << endl;
}void ConcreteBuilder::BuildPartC(const string& buildPara) {cout << "Step3: Build PartC..." << buildPara << endl;
}Product* ConcreteBuilder::GetProduct() {BuildPartA("pre-defined");BuildPartB("pre-defined");BuildPartC("pre-defined");return new Product();
}

指导者类定义

// Director.h
#ifndef _DIRECTOR_H_
#define _DIRECTOR_H_class Builder;class Director {
public:Director(Builder* bld);~Director();void Construct();
protected:
private:Builder* _bld;
};#endif // ~_DIRECTOR_H_

指导者类实现

// Director.cpp
#include "Director.h"
#include "Builder.h"Director::Director(Builder* bld) {_bld = bld;
}Director::~Director() {}void Director::Construct() {_bld->BuildPartA("user-defined");_bld->BuildPartB("user-defined");_bld->BuildPartC("user-defined");
}

测试程序

// main.cpp
#include "Builder.h"
#include "Product.h"
#include "Director.h"
#include <iostream>
using namespace std;int main(int argc, char* argv[]) {Director* d = new Director(new ConcreteBuilder());d->Construct();return 0;
}

五、Builder 模式的优缺点

优点
        构建过程与表示分离:对象的构建过程独立于其最终表示,使得相同的构建过程可以生成不同的对象。
        灵活性:通过在每一步骤中引入参数,可以灵活地调整对象的构建过程。
        易于扩展:新增构建步骤或调整构建顺序非常方便。

缺点
        复杂性增加:随着构建步骤的增多,Builder 模式的实现可能变得复杂。
        代码冗余:每个具体构建者类都需要实现相同的构建步骤接口,可能导致代码冗余。

六、总结

        Builder 模式是一种强大的设计模式,适用于复杂对象的构建。它通过分步骤构建对象,并将构建过程与表示分离,提供了灵活性和可扩展性。然而,在面对简单对象的构建时,Builder 模式可能显得过于复杂。因此,在实际开发中,应根据具体需求选择合适的设计模式。

http://www.dtcms.com/wzjs/420283.html

相关文章:

  • 网站域名如何起网站seo方案策划书
  • 长沙手机网站建设公司排名soso搜搜
  • 网站vip功能怎么实现俄罗斯搜索引擎yandex推广入口
  • 网站手机版二维码怎么做软件培训
  • wordpress 邮件 gmail广州seo全网营销
  • 南昌比较好的网站设计常用的五种网络营销工具
  • 平台网站建设设计百度指数查询工具
  • 有永久免费的域名吗知乎seo门户网价格是多少钱
  • 国内免费建站网站哈尔滨seo网站管理
  • 门户网站建设教程百度推广如何计费
  • 怎么在搜狐快站上做网站爱链
  • 百度竞价推广优势网站seo优化服务
  • 抖音代运营多少钱一个月google搜索排名优化
  • 台州网站建设系统社群营销成功案例
  • 外汇直播室都是网站做免费注册网页网址
  • 网站开发环境写什么淄博头条新闻今天
  • 多少企业需要网站建设百度登录首页
  • 人物摄影网站免费的短视频app大全
  • 哈尔滨网站搜索优化公司百度百家号注册
  • 成都哪家公司做网站seo网站推广软件
  • 珠海横琴建设局网站学校招生网络营销方案
  • 石家庄网站建设推广公司电话百度竞价推广开户价格
  • 历史文化类网站源码三只松鼠营销案例分析
  • 快速网站建设多少钱app营销策略都有哪些
  • 系统网站建设百度关键词排名推广
  • 施工企业质量管理体系应按照我国旺道网站排名优化
  • 山东潍坊疫情最新情况网店seo是什么意思
  • 单位做网站的目的自己做seo网站推广
  • 做网站需要准备的东西自己开网站怎么开
  • 买了两台服务器可以做网站吗重庆seo服务