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

【设计模式 04】建造者模式

如果要构建的对象很复杂,那么可以将整个构建过程拆分成多个步骤,并为每一个步骤定义一个抽象的接口。并添加一个指导者用来控制构建产品的顺序和步骤。

Java实现: 

// 产品类
class Product {private String part1;private String part2;public void setPart1(String part1) {this.part1 = part1;}public void setPar2(String part2) {this.part2 = part2;}// 其他属性和方法
}// 抽象建造者接口
interface Builder {void buildPart1(String part1);void buildPart2(String part2);Product getResult();
}// 具体建造者类
class ConcreteBuilder implements Builder {private Product product = new Product();@Overridepublic void buildPart1(String part1) {product.setPart1(part1);}@Overridepublic void buildPart2(String part2) {product.setPart2(part2);}@Overridepublic Product getResult() {return product;}
}
// 指导者类
class Director {private Builder builder;public Director(Builder builder) {this.builder = builder;}// 调用方法构建产品public void construct() {builder.buildPart1("Part 1");builder.buildPart2("Part 2");}
}public class Main {public static void main(String[] args) {// 创建指导者和建造者对象Builder builder = new ConcreteBuilder();Director director = new Director(builder);// 指导者构建产品director.construct();// 获取构建好的产品Product product = builder.getResult();// 输出产品信息System.out.println(product);}
}

 【设计模式专题之建造者模式】4. 自行车加工

CPP版题解:

#include <iostream>
#include <string>
using namespace std;class Bike {
public:string frame;string tires;void setFrame(const string& frame) {this->frame = frame;}void setTires(const string& tires) {this->tires = tires;}friend ostream& operator << (ostream& os, const Bike& bike) {os << bike.frame << " " << bike.tires;return os;}
};class BikeBuilder {
public:virtual void buildFrame() = 0;virtual void buildTires() = 0;virtual Bike getResult() = 0;
};class MountainBikeBuilder : public BikeBuilder {
private:Bike bike;
public:void buildFrame() override {bike.setFrame("Aluminum Frame");}void buildTires() override {bike.setTires("Knobby Tires");}Bike getResult() override {return bike;}
};
class RoadBikeBuilder : public BikeBuilder {
private:Bike bike;
public:void buildFrame() override {bike.setFrame("Carbon Frame");}void buildTires() override {bike.setTires("Slim Tires");}Bike getResult() override {return bike;}
};class BikeDirector {
public:Bike construct(BikeBuilder& builder) {builder.buildFrame();builder.buildTires();return builder.getResult();}
};int main() {int N;cin >> N;BikeDirector director;for (int i = 0; i < N; i++) {string bikeType;cin >> bikeType;BikeBuilder* builder;if (bikeType == "mountain") {builder = new MountainBikeBuilder();} else {builder = new RoadBikeBuilder();}Bike bike = director.construct(*builder);cout << bike << endl;delete builder;}return 0;
}

 

http://www.lryc.cn/news/312648.html

相关文章:

  • Python使用错误总结
  • 【Java EE初阶三十】JVM的简单学习
  • thinkphp5水平分割表partition,以及查询操作
  • docker部署aria2-pro
  • vue中Mixins
  • linux常用指令(定期更新)
  • 【项目】图书管理系统
  • 华为OD机试 - 疫情扩散时间计算 - 矩阵(Java 2024 C卷 200分)
  • [数据集][图像分类]棉花叶子病害分类数据集2293张4类别
  • 《辐射4》是一款什么样的游戏 怎样在mac电脑上玩到《辐射4》辐射4攻略 辐射4开局加点 怎么在Mac电脑玩Steam游戏
  • 视频推拉流EasyDSS平台直播通道重连无法转推的原因排查与解决
  • Javaweb之SpringBootWeb案例之自动配置案例的自定义starter测试的详细解析
  • java包的相关概念
  • window搭建本地mongo数据库并导入数据
  • 如何为Android车载应用开发通知?
  • centos上部署k8s
  • 网络安全: Kali Linux 进行 MSFvenom 程序利用
  • 浅显易懂C语言指针!!!(三)
  • 01 LM 算法及 Cpp 实现
  • 【网络安全架构】互联网正对中国社会、经济、文化等各个领域产生巨大影响‘
  • 【笔记】Android ServiceStateTracker 网络状态变化逻辑及SPN更新影响
  • 2PC和3PC的区别是什么
  • redis未设置密码被植入挖矿脚本
  • 轮询--一起学习吧之架构
  • 【开发工具】Git模拟多人开发场景理解分支管理和远程仓库操作
  • 从零学习Linux操作系统 第三十一部分 ansible常用模块介绍
  • 【Linux C | 网络编程】多播的概念、多播地址、UDP实现广播的C语言例子
  • HarmonyOS NEXT应用开发案例——滑动页面信息隐藏与组件位移效果
  • ffmpeg 转码过程中参数含义
  • 探索c++——了解c++的魅力