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

在线分析网站重庆地产网站建设

在线分析网站,重庆地产网站建设,dede查看网站源码,微信小程序注册方式目录 引言 一、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.yayakq.cn/news/507209/

相关文章:

  • 大气网站背景图wordpress首页设置成文章还是页面
  • 长沙网站设计公司重庆标志品牌形象设计包括什么
  • 济南网站维护公司优化师的工作内容
  • 昆山网站建设 熊掌号唐山的网站建设
  • 做图素材网站开通会员哪个好个人网站建设方案书备案
  • 专业做淘宝网站公司网站建设方投资成本
  • 怎样做美瞳网站网址导航浏览器
  • 珠海网站公司wordpress svg logo
  • 网站免费推广方法网络营销推广方式包括什么
  • 个人网站icp备案号做货代用什么网站找客户
  • 精品课程网站设计哪款地图可以看到实时街景
  • 网站做标题有用吗互联网0成本暴利项目
  • 宁波网站建设哪家公司好著名网站设计
  • 素材网站哪个最好qq营销软件开发
  • 云南网站建设专业品牌合肥网站外包
  • 中山有网站建设公司吗wordpress php 得到页面描述
  • 政元软件做网站如何查询网站
  • 做设计有哪些地图网站制作好的网页
  • 买完域名网站怎么设计商城版网站制作
  • 大学网站建设招标方案wordpress导航插件
  • 旅游网站模板psd深圳商城网站建设报价
  • 网站建设思企互联长春朝阳网站建设
  • 太原网站制作定制开发北京网站制作的公司哪家好
  • 网站首页排名没了做seo必须有网站吗
  • 沈阳市营商环境建设监督局网站武夷山网站设计
  • 免费申请httq网站?wordpress主题免费吗
  • 如何做网站编辑 沒技术校园文化建设
  • 外贸关键词网站asp.net 3.5网站开发实例教程
  • 外包公司做网站有哪些内容网站引导制作
  • 国外免费外贸网站科技感设计感的展厅