3.创建型模式--创建者模式

建造者模式(Builder Pattern)是一种对象构建的设计模式,它允许你分步骤构造一个复杂对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在建造者模式中,一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

建造者模式的优点:

  1. 建造者独立,易扩展。
  2. 便于控制对象创建过程。
  3. 可以更加精细地控制产品的创建过程。

建造者模式的缺点:

  1. 产品必须有共同点,范围有限制。
  2. 如内部变化复杂,会有很多的建造类。

以上的解释和代码都是来自文心一言, 但是我认为所谓的创建者模式更像是对一个东西的抽象. 也就是把一个东西抽象成类.很多时候, 我们总以为设计模式很模糊, 实际上这些东西都是有用到的, 只是平时没有总结出方法名而已.

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  // House 结构体  
typedef struct House {  char* walls;  char* floor;  char* roof;  
} House;  // HouseBuilder 结构体  
typedef struct HouseBuilder {  House* house;  void (*SetWalls)(struct HouseBuilder*, const char*);  void (*SetFloor)(struct HouseBuilder*, const char*);  void (*SetRoof)(struct HouseBuilder*, const char*);  House* (*GetHouse)(struct HouseBuilder*);  
} HouseBuilder;// 创建新的 House  
House* CreateHouse() {  return (House*)malloc(sizeof(House));  
}  // 设置墙壁  
void SetWalls(HouseBuilder* builder, const char* walls) {  builder->house->walls = strdup(walls);  
}  // 设置地板  
void SetFloor(HouseBuilder* builder, const char* floor) {  builder->house->floor = strdup(floor);  
}  // 设置屋顶  
void SetRoof(HouseBuilder* builder, const char* roof) {  builder->house->roof = strdup(roof);  
}  // 获取 House  
House* GetHouse(HouseBuilder* builder) {  House* temp = builder->house;  builder->house = NULL;  return temp;  
}// 创建 HouseBuilder 的实例  
HouseBuilder* CreateHouseBuilder() {  HouseBuilder* builder = (HouseBuilder*)malloc(sizeof(HouseBuilder));  builder->house = CreateHouse();  builder->SetWalls = SetWalls;  builder->SetFloor = SetFloor;  builder->SetRoof = SetRoof;  builder->GetHouse = GetHouse;  return builder;  
}  // 使用 HouseBuilder 构建 House  
int main() {  HouseBuilder* builder = CreateHouseBuilder();  builder->SetWalls(builder, "Stone walls");  builder->SetFloor(builder, "Wood floor");  builder->SetRoof(builder, "Tile roof");  House* house = builder->GetHouse(builder);  printf("Walls: %s\n", house->walls);  printf("Floor: %s\n", house->floor);  printf("Roof: %s\n", house->roof);  // 释放内存  free(house->walls);  free(house->floor);  free(house->roof);  free(house);  free(builder);  return 0;  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA配置本地Maven(解决依赖下载缓慢)

1.下载Maven Maven下载页 根据需要选择下载其中一个&#xff0c;我选了zip格式的 将下载好的apache-maven-3.9.5解压到你想要的目录下 2.配置系统环境 设置系统环境变量 MAVEN_HOME 为安装路径的bin目录 变量名&#xff1a;MAVEN_HOME 变量值&#xff1a;写你的 apache-m…

Docker 哲学 - docker swarm

Docker Swarm 模式下的集群管理和服务恢复机制 Docker Swarm 是 Docker 的集群管理和编排功能。在 Swarm 模式下&#xff0c;你可以将多个 Docker 主机组合成一个虚拟主机&#xff0c;称为 Swarm 集群。Swarm 集群由一个或多个管理节点&#xff08;manager nodes&#xff09;和…

故障诊断 | 一文解决,GCN图卷积神经网络模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,GCN图卷积神经网络模型的故障诊断(Matlab) 模型描述 GCN(Graph Convolutional Network)是一种基于图结构数据进行卷积操作的神经网络模型。它在处理图数据上展现了很好的性能,特别适用于节点分类、图分类和图生成等任务。 GCN模…

金蝶Apusic应用服务器 createDataSource JNDI注入漏洞(QVD-2023-48476)

0x01 产品简介 金蝶 Apusic 应用服务器(Apusic Application Server,AAS)是一款标准、安全、高效、集成并具丰富功能的企业级应用服务器软件,全面支持 JakartaEE 8/9的技术规范,提供满足该规范的 Web 容器、 EJB 容器以及 WebService 容器等,支持 Websocket 1.1、Servlet…

延时队列实现实战:如何利用 RabbitMQ 实现延时队列,以满足特定延迟处理需求

实现延时队列&#xff0c;可以通过RabbitMQ的死信队列&#xff08;Dead-letter queue&#xff09;特性&#xff0c;“死信队列”是当消息过期&#xff0c;或者队列达到最大长度时&#xff0c;未消费的消息会被加入到死信队列。然后&#xff0c;我们可以对死信队列中的消息进行消…

51入门之LED

目录 1.配置文件 2.点亮一个LED 2.1单个端口操作点亮单个LED 2.2整体操作点亮LED 3.LED闪烁 4.LED实现流水灯 4.1使用for循环和移位实现 4.1.1移位操作符 4.1.2使用移位操作和for循环实现 4.2使用移位函数实现LED流水灯 众所周知&#xff0c;任何一个硬件工程师…

基于机器学习的木马检测模型的设计与实现(论文)_kaic

摘 要 科技的发展带来了人们生活的改变&#xff0c;近年来我国网民已突破十亿人口&#xff0c; 而且在后疫 情时代&#xff0c; 经历了疫情时期的一系列线上活动&#xff0c; 人们对网络的依赖比以往任何时期都要高 得多。高频次的上网行为也带来了一系列安全问题&#xff…

【C++风云录】从SQLite到Redis:探索C++与多种数据库的交互之道

开启数据库之旅&#xff1a;通过C与各种数据库交互&#xff0c;事半功倍 数据库操作&#xff1a;介绍与应用 前言 在现代软件开发中&#xff0c;数据库扮演着至关重要的角色&#xff0c;用于存储和管理大量的数据。为了更有效地操作数据库&#xff0c;开发人员常常依赖于专门…

金融数据_PySpark-3.0.3随机森林(RandomForestClassifier)实例

金融数据_PySpark-3.0.3随机森林(RandomForestClassifier)实例 随机森林 (Random Forest) 和随机森林回归 (Random Forest Regression) 都是基于集成学习的算法, 但它们在任务和输出方面存在一些关键的区别。 随机森林 (Random Forest)&#xff1a; 任务类型: 随机森林主要用…

Cisco路由器配置IPv6 Manual隧道

Cisco路由器配置IPv6 Manual隧道 IPv6与IPv4共存的方式 IPv6与IPv4共存方式大致有三种&#xff1a; 双栈&#xff1a;要求网络中所有设备均同时支持IPv4和IPv6转换&#xff1a;转换这种方式将IPv6协议的报头转换成IPv4协议报头。隧道&#xff1a;假定两个IPv6节点要使用IPv6…

flink源码编译-job提交

1、启动standalone集群的taskmanager standalone集群中的taskmanager启动类为 TaskManagerRunner 2 打开master启动类 通过 ctrln快捷键&#xff0c;找到、并打开类&#xff1a; org.apache.flink.runtime.taskexecutor.TaskManagerRunner 3 修改运⾏配置 基本完全按照mas…

RabbitMQ在云原生环境中部署和应用实践

一、RabbitMQ和云原生技术的关系 RabbitMQ是一种开源的、实现了先进的消息队列协议&#xff08;AMQP&#xff09;的消息队列软件。而云原生技术就是为在公共云、私有云以及其他各种云环境提供应用的一种方法。RabbitMQ和云原生技术在分布式系统和微服务架构中都起到了关键作用…

NIUSHOP完美运营版商城 虚拟商品全功能商城 全能商城小程序 智慧商城系统 全品类百货商城

完美运营版商城/拼团/团购/秒杀/积分/砍价/实物商品/虚拟商品等全功能商城 干干净净 没有一丝多余收据 还没过手其他站 还没乱七八走的广告和后门 后台可以自由拖曳修改前端UI页面 还支持虚拟商品自动发货等功能 挺不错的一套源码 前端UNIAPP 后端PHP 一键部署版本 源码免费…

腾讯云4核8G服务器性能怎么样?能用来干什么?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

ros小问题之rosdep update time out问题

在另外一篇ROS 2边学边练系列的文章里有写碰到这种问题的解决方法&#xff08;主要参考了其他博主的文章&#xff0c;只是针对ROS 2做了些修改调整&#xff09;&#xff0c;此处单拎出来方便查找。 在ROS 2中执行rosdep update时&#xff0c;报出如下错误&#xff1a; 其实原因…

elsint报错Delete `␍`eslintprettier/prettier

一&#xff0c;原因 这篇博客写得很清楚&#xff1a;解决VSCode Delete ␍eslint(prettier/prettier)错误_vscode 删除cr-CSDN博客 还有这篇文章&#xff0c;解决办法很详细&#xff1a;滑动验证页面 二&#xff0c;解决办法 根目录下新建.prettierrc.js文件 module.exports…

谷歌AI搜索革新:探索高级搜索服务背后的未来趋势

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

vulhub中Apache Solr RemoteStreaming 文件读取与SSRF漏洞复现

Apache Solr 是一个开源的搜索服务器。在Apache Solr未开启认证的情况下&#xff0c;攻击者可直接构造特定请求开启特定配置&#xff0c;并最终造成SSRF或任意文件读取。 访问http://your-ip:8983即可查看Apache Solr后台 1.访问http://your-ip:8983/solr/admin/cores?indexI…

一致性hash问题(负载均衡原理)

一致性哈希问题 简介 一致性Hash是一种特殊的Hash算法&#xff0c;由于其均衡性、持久性的映射特点&#xff0c;被广泛的应用于负载均衡领域&#xff0c;如nginx和memcached都采用了一致性Hash来作为集群负载均衡的方案。 本文将介绍一致性Hash的基本思路&#xff0c;并讨论其…

gpt国内怎么用?最新版本来了

claude 3 opus面世后&#xff0c;这几天已经有许多应用&#xff0c;而其精确以及从不偷懒&#xff08;截止到2024年3月11日还没有偷懒&#xff09;的个性&#xff0c;也使得我们可以用它来首次完成各种需要多轮对话的尝试。 今天我们想要进行的一项尝试就是—— 如何从一个不知…