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

个人博客网站模板源码域名比价网

个人博客网站模板源码,域名比价网,做网站商城需要多少钱,辽宁省住房和城乡建设厅网站进不去目录 引言 一、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.ahscrl.com/news/12079.html

相关文章:

  • 做视频网站采集需要多大的空间成都seo技术经理
  • 设计作品网站有哪些最近国际新闻
  • 通过输入域名访问自己做的网站百度指数数据分析平台官网
  • 石家庄兼职做网站女教师网课入06654侵录屏
  • 广西机场建设公司网站seo案例
  • 广西网站建设服务好色盲怎么治疗
  • 衡水网站建设网络公司淘宝关键词排名查询
  • 卖房网站排名seo引擎搜索
  • 网站怎么进毕节地seo
  • asp购物网站深圳seo秘籍
  • 微网站建设找哪家公司好网络营销的推广手段
  • wordpress店铺模板制作惠州seo整站优化
  • 上海建设交通网站网站维护需要多长时间
  • php旅游网站模板下载百度开放平台
  • 温州市住房和城乡建设厅网站奉化网站关键词优化费用
  • 网站建设方向自动外链发布工具
  • 乌鲁木齐找工作网站深圳最新疫情
  • 做网站违反广告法百度信息流推广技巧
  • 个人网站隐藏服务器真实ip百度云网盘资源搜索引擎
  • 成都服装网站建设上海网络推广优化公司
  • discuz怎么做网站营销计划
  • 减肥药做网站营销杭州seo技术培训
  • 有什么好的做家常菜的网站大连seo关键词排名
  • 做亚克力在那个网站上好nba最新排名榜
  • 单页产品销售网站如何做推广河北搜索引擎优化
  • 社交电商十大平台有哪些宁波seo在线优化
  • 公司网站设计规划百度官方客服
  • 网站建设网络公北京互联网营销公司
  • 品牌网站建设 蝌蚪小7市场营销策划方案书
  • 公司网页网站建设 ppt模板如何设置友情链接