建造者模式__c#

news/2024/9/28 12:13:00/

目录

调用

指挥者

抽象建造者

建造者

定义具体产品


调用

用指挥者指挥建造者建造产品

在指挥者这里组装成产品

namespace _建造者模式
{internal class Program{static void Main(string[] args){Builder builder=new JiangHuaiBuilder();//建造者Director director =new Director(builder);//指挥者ProductCar car = director.Construct();//指挥者指挥建造产品}}
}

指挥者

可以指挥建造者用哪几个部件建造产品,指挥组成具体产品

可以定义多个建造者

namespace _建造者模式
{/// <summary>/// 指挥者/// </summary>public class Director{private Builder _builder;//建造者引用//通过构造函数传入具体建造者public Director(Builder builder){_builder = builder;}//构建方法1-自动挡(没有离合器)public ProductCar Construct(){_builder.BuildEngine_A();_builder.BuildGearBox_B();_builder.BuildSteeringWheel_D();_builder.BuildThrottle_E();Console.WriteLine("构建自动挡汽车");return _builder.GetBuildResult();}}
}

抽象建造者

可以有多个,声明要建造的产品用什么组成

namespace _建造者模式
{/// <summary>/// 抽象建造者/// </summary>public abstract class Builder{public ProductCar Car { get; set; }//产品引用public abstract void BuildEngine_A();//建造汽车引擎public abstract void BuildGearBox_B();//建造变速箱public abstract void BuildClutch_C();//建造离合器public abstract void BuildSteeringWheel_D();//建造汽车方向盘public abstract void BuildThrottle_E();//建造加速器public abstract ProductCar GetBuildResult();//返回建造的结果(产品)}
}

建造者

实现组成产品的具体部件

namespace _建造者模式
{/// <summary>/// 具体建造者A-江淮汽车/// </summary>public class JiangHuaiBuilder : Builder{public JiangHuaiBuilder(){Car = new ProductCar();}public override void BuildClutch_C(){Car.Clutch_C = "江淮离合器";Console.WriteLine("建造江淮离合器");}public override void BuildEngine_A(){Car.Engine_A = "江淮引擎";Console.WriteLine("建造江淮引擎");}public override void BuildGearBox_B(){Car.GearBox_B = "江淮变速器";Console.WriteLine("建造江淮变速器");}public override void BuildSteeringWheel_D(){Car.SteeringWheel_D = "江淮方向盘";Console.WriteLine("建造江淮方向盘");}public override void BuildThrottle_E(){Car.Throttle_E = "江淮加速器";Console.WriteLine("建造江淮加速器");}public override ProductCar GetBuildResult(){Console.WriteLine("构建产品成功");//返回建造的结果return Car;}}
}

 定义具体产品

namespace _建造者模式
{/// <summary>
/// 定义产品
/// </summary>public class ProductCar{public string Engine_A { get; set; }//发动机public string GearBox_B { get; set; }//变速箱public string Clutch_C { get; set; }//离合器public string SteeringWheel_D { get; set; }//方向盘public string Throttle_E { get; set; }}
}


http://www.ppmy.cn/news/1531026.html

相关文章

c++开发之网络篇curl

libcurl 是一个功能强大的库&#xff0c;常用于在 C 和 C 程序中执行 HTTP 请求、处理 URL 资源。下面是关于如何在 C 中使用 libcurl 的详细指南&#xff0c;以及一个基础的示例代码。 1. 安装 libcurl 在使用之前&#xff0c;确保你已经安装了 libcurl 库。根据操作系统&am…

MCUboot 和 U-Boot区别

MCUboot 和 U-Boot 都是用于嵌入式系统的引导加载程序&#xff0c;但它们在一些方面存在区别&#xff1a; 功能特性 安全特性侧重不同 MCUboot &#xff1a;更专注于安全引导方面&#xff0c;强调安全启动、固件完整性验证和加密等安全功能。它提供了强大的安全机制来防止恶意…

关于ollama 在mac的部署问题

安装 官网链接 直接按需求下载即可 默认模型下载地址 macOS: ~/.ollama/models Linux: /usr/share/ollama/.ollama/models Windows: C:\Users<username>.ollama\models 根据需要的平台设置相应的环境变量&#xff1a; OLLAMA_MODELS 如Mac 设置 &#xff5e;/.zshrc …

使用three.js+vue3完成无人机上下运动

效果图如上 代码&#xff1a; <template><div class"drones"><div ref"dronesContainer" class"drones-container"></div></div></template><script setup>import { ref, onMounted, onUnmounted, …

【开源免费】基于SpringBoot+Vue.JS教师工作量管理系统(JAVA毕业设计)

本文项目编号 T 043 &#xff0c;文末自助获取源码 \color{red}{T043&#xff0c;文末自助获取源码} T043&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

大数据平台符合信创(CDH国产化代替)详细方案(企业内部不外传方案)

目录 第一章 介绍信创 1.1 信创背景与要求 1.2 介绍符合信创要求的产品 第二章 CDH不符合信创要求的原因 2.1 国外厂商背景 2.2 技术自主性不足 2.3 安全和合规问题 第三章 国产整体方案代替方案 3.1 华为 FusionInsight 3.2 阿里云MaxCompute 3.3 星环科技TDH 第四…

Linux云计算 |【第四阶段】NOSQL-DAY1

主要内容&#xff1a; NoSQL概述&#xff08;RDBMS、NoSQL&#xff09;、部署Redis服务、Redis数据类型&#xff08;字符串、散列类型、列表类型、集合类型、有序集合类型&#xff09;、Redis其它操作命令、修改Redis服务运行参数、部署支持PHP和Redis的Nginx服务器 一、NoSQL…

tomcat 配置jenkins_home 目录

要在 Tomcat 中为 Jenkins 配置自定义的 JENKINS_HOME 目录&#xff08;用于存储 Jenkins 的工作目录和配置&#xff09;&#xff0c;你需要在 Tomcat 的环境变量中进行配置。下面是详细步骤&#xff1a; 1. 创建 Jenkins Home 目录 首先&#xff0c;选择一个你想要作为 JENK…