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

延安做网站的公司真正免费建站网站

延安做网站的公司,真正免费建站网站,廊坊seo霸屏,网站建设需要哪些素材一、建造者模式简介 建造者模式(Builder Pattern)又被称为生成器模式。它旨在构建一个复杂对象的各个部分,而不需要指定该对象的具体类。该模式特别适用于对象的构建过程复杂且需要多个步骤的情况。建造者模式是一种对象创建型模式之一&…

一、建造者模式简介

建造者模式(Builder Pattern)又被称为生成器模式。它旨在构建一个复杂对象的各个部分,而不需要指定该对象的具体类。该模式特别适用于对象的构建过程复杂且需要多个步骤的情况。建造者模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。

建造者模式适用于:当一个对象的构建比较复杂,将一个对象的构建(?)和对象的表示(?)进行分离的情况

  1. 分离构建和表示
    建造者模式通过将复杂对象的构建过程与其表示分离开来,允许构建过程的变化不会影响到最终对象的表示。也就是说,构建者模式关注的是如何一步一步地构建一个对象,而不是最终对象是什么样的。

  2. 逐步构建
    该模式允许通过多个步骤(方法)来逐步构建对象,这些步骤可以是可选的或者是必需的。构建的顺序和内容可以被灵活控制。

GoF一书中对建造者模式的介绍

 二、建造者模式的用处

1. 复杂对象的构建

当一个对象的构建过程包含多个步骤或组件时,建造者模式可以帮助将这些步骤分开,从而使构建过程更加清晰和易于管理。例如,构建一个具有多种配置选项的复杂数据结构或图形用户界面(GUI)组件。

2. 构建过程的灵活性

建造者模式允许灵活地定制对象的创建过程,而无需修改对象的具体实现。例如,不同的建造者可以用于创建具有不同配置或特性的对象,而指挥者(Director)负责控制构建的步骤和顺序。

3. 解耦构建和表示

将对象的构建过程与表示分离,使得构建的过程和最终的对象类型可以独立变化。这种解耦使得系统更加灵活,易于扩展和维护。例如,你可以在不修改对象创建逻辑的情况下添加新的产品类型或更改产品的外观。

4. 支持逐步构建

对于需要逐步构建的对象,建造者模式可以逐步执行构建步骤。这样可以在构建过程中控制每个步骤的执行,并允许有选择地构建对象。例如,在构建复杂的报告或文档时,你可以按章节、段落等逐步添加内容。

5. 提高代码可读性和可维护性

通过将构建过程分解成多个清晰的步骤,建造者模式使得代码更加易读和易于维护。每个建造者只负责对象的一个方面的构建,使得构建过程更加模块化。

6. 支持复杂的构建逻辑

当对象的构建逻辑非常复杂,需要处理多种条件或选项时,建造者模式可以封装这些复杂的逻辑。这样,可以将构建逻辑集中在建造者类中,而客户端代码只需知道如何使用指挥者来创建对象

三、建造者模式的设计方法

 builder.cpp

#include <iostream>
#include <string>
#include <memory>// 产品
class House {
public:void setDoor(const std::string& door) {this->door = door;}void setWall(const std::string& wall) {this->wall = wall;}void setWindow(const std::string& window) {this->window = window;}void setFloor(const std::string& floor) {this->floor = floor;}const std::string& getDoor() const {return this->door;}const std::string& getWall() const {return this->wall;}const std::string& getWindow() const {return this->window;}const std::string& getFloor() const {return this->floor;}protected:std::string door;std::string wall;std::string window;std::string floor;
};// 工程队
class Builder {
public:virtual ~Builder() {}virtual void buildWall() = 0;virtual void buildDoor() = 0;virtual void buildWindow() = 0;virtual void buildFloor() = 0;virtual std::shared_ptr<House> getHouse() = 0;virtual void viewHouse() const = 0; // 标记为 const
};class VillaBuilder : public Builder {
public:VillaBuilder() : house(std::make_shared<House>()) {}void buildWall() override {house->setWall("别墅墙");}void buildDoor() override {house->setDoor("别墅门");}void buildWindow() override {house->setWindow("别墅窗户");}void buildFloor() override {house->setFloor("别墅地板");}std::shared_ptr<House> getHouse() override {return house;}void viewHouse() const override {std::cout << "这是一座好别墅,有" << house->getWall() << ", 有" << house->getWindow() << ", 有" << house->getDoor() << ", 有" << house->getFloor() << "!" << std::endl;}private:std::shared_ptr<House> house;
};class FlatBuilder : public Builder {
public:FlatBuilder() : house(std::make_shared<House>()) {}void buildWall() override {house->setWall("公寓墙");}void buildDoor() override {house->setDoor("公寓门");}void buildWindow() override {house->setWindow("公寓窗户");}void buildFloor() override {house->setFloor("公寓地板");}std::shared_ptr<House> getHouse() override {return house;}void viewHouse() const override {std::cout << "这是一座好公寓,有" << house->getWall() << ", 有" << house->getWindow() << ", 有" << house->getDoor() << ", 有" << house->getFloor() << "!" << std::endl;}private:std::shared_ptr<House> house;
};// 设计师
class Director {
public:Director(std::shared_ptr<Builder> builder) : builder(builder) {}void constructHouse() {builder->buildWall();   // 先建墙builder->buildWindow(); // 然后建窗户builder->buildDoor();   // 再建门builder->buildFloor();  // 最后建地板}void viewHouse() const {builder->viewHouse();}private:std::shared_ptr<Builder> builder;
};// 设计师请工程队按照图纸建造好房子(客户端)
void doWorking() {// 请一个建造别墅的工程队std::shared_ptr<Builder> builder = std::make_shared<VillaBuilder>();Director director(builder);director.constructHouse();director.viewHouse();// 请一个建造公寓的工程队builder = std::make_shared<FlatBuilder>();Director anotherDirector(builder);anotherDirector.constructHouse();anotherDirector.viewHouse();
}int main() {// 开工doWorking();return 0;
}

运行效果

 

  1. 产品(Product)
    产品是最终构建出来的复杂对象,它包含多个组成部分和属性。产品类通常有多个子类,具体实现可以因业务需求而异。

  2. 建造者(Builder)
    建造者接口定义了构建产品的各个部分的方法。每个具体的建造者实现这些方法,按照特定的步骤来构建产品。

  3. 具体建造者(ConcreteBuilder)
    具体建造者实现了建造者接口,负责具体的构建步骤。这些步骤包括创建产品的不同部分,并在最后将产品返回。

  4. 指挥者(Director)
    指挥者类负责按照特定的顺序调用建造者的方法来构建产品。它将建造者的具体实现与构建过程分开,使得构建过程与产品的具体类型解耦。

  5. 客户端(Client)
    客户端负责使用指挥者和建造者来构建产品。客户端通常不需要知道产品的具体构建过程或其组成部分。

四、总结

建造者模式模仿建筑行业的建造行为,设计师设计好图纸交给工程队,工程队根据图纸建造房子,房子建造好之后交给客户。设计的代码中将构造(设计师的图纸)和表示(工程队造的房子)完美分离,这样可以把复杂的部分简单化,最后有机地组合在一起最终形成我们想要的产品。

http://www.shuangfujiaoyu.com/news/36835.html

相关文章:

  • jsp做的网站源码游戏推广员招聘
  • h5网站免费友链互换
  • 做网站的技术要求所有的竞价托管公司
  • 企业网站如何推广网站推广公司
  • 豪华网站建设网络推广是做什么工作
  • 外贸型网站制作自动app优化最新版
  • 网站如何实现微关键词查询的分析网站
  • 天津做网站认准津坤科技站长工具ping
  • 宁波网站建设服务报价衡水今日头条新闻
  • 外贸网站怎么做效果好打开百度首页
  • 那个网站教做馒头广州网络推广平台
  • 罗琳做的网站优化方案怎么写
  • 摄影网站建立网站建设的整体流程有哪些
  • 动画设计专业学什么谷歌seo查询
  • 做企业网站开发哪家好基础建站如何提升和优化
  • 毕业设计做网站功能实现不出怎么办中国站长之家
  • 盐城网站建设费用杭州明开seo
  • 免费 wordpress企业主题重庆seo推广公司
  • 做网站的服务器怎么弄全面落实疫情防控优化措施
  • 淘宝网站详情页怎么做semi认证
  • 南海做网站公司百度关键词点击器
  • 云浮网站建设项目推广网
  • 英文外贸网站 php源码河北百度推广电话
  • 淘宝联盟推广网站怎么建设台州网站建设平台
  • 用啥网站做首页线上营销
  • 辽阳网站建设多少钱网络推广属于什么行业
  • 申请网站服务器武汉网站营销seo方案
  • 龙岩网站优化公司湖南省人民政府
  • 都匀网站建设什么是网站推广策略
  • 柳州网络网站建设站长seo查询工具