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

C#设计模式之---建造者模式

建造者模式(Builder Pattern)

建造者模式(Builder Pattern)是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道产品内部组成的细节,从而降低了客户端与具体产品之间的耦合度。使用多个简单的对象一步一步构建成一个复杂的对象。属于创建型模式,它提供了一种创建对象的最佳方式。

using System;
using System.Text;
namespace ConsoleApplication
{//建造者抽象类,定义了建造者的能力public abstract class Builder{public abstract void WriteCode();       //写代码public abstract void WriteAnnotation(); //写注释public abstract void Compile();         //编译}/// <summary>/// 高级的程序员/// </summary>public class SeniorBuilder : Builder{private StringBuilder program = new StringBuilder();public override void WriteCode(){program.Append("架构代码-->");}public override void WriteAnnotation(){program.Append("写注释-->");}public override void Compile(){program.Append("编译-->");}public string GetContent(){return program.Append("代码编写完成").ToString();}}/// <summary>/// 初级的程序员/// </summary>public class JuniorBuilder : Builder{private StringBuilder program = new StringBuilder();public override void WriteCode(){program.Append("实现功能代码-->");}public override void WriteAnnotation(){program.Append("写注释-->");}public override void Compile(){program.Append("编译代码-->");}public string GetContent(){return program.Append("简单小程序写完").ToString();}}//监工类,制定具体的步骤public class Director{private Builder builder;public Director(Builder builder){this.builder = builder;}//编写程序的流程,public void Construct(){builder.WriteCode();      //先写代码builder.WriteAnnotation();//写注释builder.Compile();        //编译程序}}class Program{static void Main(string[] args){//资深的程序员1编写程序SeniorBuilder seniorBuilder = new SeniorBuilder();Director director1 = new Director(seniorBuilder);director1.Construct();string p1 = seniorBuilder.GetContent();Console.WriteLine(p1);//资历较浅的程序员2编写程序JuniorBuilder juniorBuilder = new JuniorBuilder();Director director2 = new Director(juniorBuilder);director2.Construct();string p2 = juniorBuilder.GetContent();Console.WriteLine(p2);Console.ReadKey();}}
}

 

相关文章:

C#设计模式之---建造者模式

建造者模式&#xff08;Builder Pattern&#xff09; 建造者模式&#xff08;Builder Pattern&#xff09;是将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。建造者模式使得建造代码与表示代码的分离&#xff0c;可以使客户端不必知道…...

output delay 约束

output delay 约束 一、output delay约束概述二、output delay约束系统同步三、output delay约束源同步 一、output delay约束概述 特别注意&#xff1a;在源同步接口中&#xff0c;定义接口约束之前&#xff0c;需要用create_generated_clock 先定义送出的随路时钟。 二、out…...

html2Canvas+jsPDF 下载PDF 遇到跨域的对象存储的图片无法显示

一、问题原因 对象存储的域名和你网址的域名不一样&#xff0c;此时用Canvas相关插件 将DOM元素转化为PDF&#xff0c;就会出现跨域错误。 二、解决办法 两步 1. 图片元素上设置属性 crossorigin"anonymous" 支持原生img和eleme组件 2. 存储桶设置资源跨域访问…...

【C#】并行编程实战:异步流

本来这章该讲的是 ASP .NET Core 中的 IIS 和 Kestrel &#xff0c;但是我看了下这个是给服务器用的。而我只是个 Unity 客户端程序&#xff0c;对于服务器的了解趋近于零。 鉴于我对服务器知识和需求的匮乏&#xff0c;这里就不讲原书&#xff08;大部分&#xff09;内容了。本…...

在家下载论文使用哪些论文下载工具比较好

在家下载论文如果不借助论文下载工具是非常艰难的事情&#xff0c;因为很多查找下载论文的数据库都是需要账号权限才可使用的。 例如&#xff0c;我们查找中文论文常用的知网、万方等数据库以及众多国外论文数据库。 在家下载知网、万方数据库论文可用下面的方法&#xff1a;…...

【LeetCode 算法】Handling Sum Queries After Update 更新数组后处理求和查询-Segment Tree

文章目录 Handling Sum Queries After Update 更新数组后处理求和查询问题描述&#xff1a;分析代码线段树 Tag Handling Sum Queries After Update 更新数组后处理求和查询 问题描述&#xff1a; 给你两个下标从 0 开始的数组 n u m s 1 和 n u m s 2 nums1 和 nums2 nums1…...

基于Linux操作系统中的MySQL数据库SQL语句(三十一)

MySQL数据库SQL语句 目录 一、SQL语句类型 1、DDL 2、DML 3、DCL 4、DQL 二、数据库操作 1、查看 2、创建 2.1、默认字符集 2.2、指定字符集 3、进入 4、删除 5、更改 6、练习 三、数据表操作 &#xff08;一&#xff09;数据类型 1、数值类型 1.1、TINYINT …...

【Matlab】基于BP神经网络的数据回归预测新数据(Excel可直接替换数据)

【Matlab】基于BP神经网络的数据回归预测新数据(Excel可直接替换数据) 1.模型原理2.数学公式3.文件结构4.Excel数据5.分块代码5.1 main.m5.2 NewData.m6.完整代码6.1 main.m6.2 NewData.m7.运行结果1.模型原理 基于BP神经网络的数据回归预测是一种常见的机器学习方法,用于处…...

HTTPS连接过程中的中间人攻击

HTTPS连接过程中的中间人攻击 HTTPS连接过程中间人劫持攻击 HTTPS连接过程 https协议就是httpssl/tls协议&#xff0c;如下图所示为其连接过程&#xff1a; HTTPS连接的整个工程如下&#xff1a; https请求&#xff1a;客户端向服务端发送https请求&#xff1b;生成公钥和私…...

redis启动失败,oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

在redis文件夹下&#xff0c;启动redis正常。 但是加入到system后启动redis失败。 一直处于starting状态。 对比正常redis服务的配置之后&#xff0c;把redis.conf里的守护进程关掉就可以了&#xff08;但是没用system管理之前&#xff0c;直接./redis.server启动是可以的&…...

milvus: 专为向量查询与检索设计的向量数据库

1. 什么是milvus&#xff1f; milvus docs milvus release Milvus的目标是&#xff1a;store, index, and manage massive embedding vectors generated by deep neural networks and other machine learning (ML) models. Milvus 向量数据库专为向量查询与检索设计&#xf…...

【C# 数据结构】Heap 堆

【C# 数据结构】Heap 堆 先看看C#中有那些常用的结构堆的介绍完全二叉树最大堆 Heap对类进行排序实现 IComparable<T> 接口 对CompareTo的一点解释 参考资料 先看看C#中有那些常用的结构 作为 数据结构系类文章 的开篇文章&#xff0c;我们先了解一下C# 有哪些常用的数据…...

智慧园区楼宇合集:数字孪生管控系统

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施&#xff0c;以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网&#xff0c;实现数据的传输、共享和响应&#xff0c;提高园区的管理效率和运营效益&#xff0c;为居…...

Ajax 黑马学习

Ajax 资源 数据是服务器对外提供的资源,通过 请求 - 处理 - 响应方式获取 请求服务器数据, 用到 XMLHttpRequest 对象 XMLHttpRequest 是浏览器提供的js成员, 通过它可以请求服务器上的数据资源 let xmlHttpRequest new XMLHttpRequest(); 请求方式 : get向服务器获取数据…...

软件应用开发的常见环境

一般来说&#xff0c;在小型项目中可能只有开发环境和生产环境&#xff1b;在中型项目中会有开发环境、staging environment、生产环境&#xff1b;在大型项目中会有开发环境、测试环境、staging environment、生产环境。 一、Dev Env / Development Environment 开发环境 开…...

Rust中的iter(), into_iter(), iter_mut()

在Rust中&#xff0c;iter(), into_iter(), iter_mut()都是用于在集合类型上创建迭代器的方法。这三个方法各有不同&#xff0c;下面一一进行介绍。 iter(): iter() 方法创建一个不可变的引用迭代器。当你只想读取集合中的元素&#xff0c;而不想改变它们或消耗集合时&#xff…...

[SQL挖掘机] - 日期函数 - current_date

current_date函数时&#xff0c;它通常被用来获取当前的日期。它返回一个表示当前日期的日期值。 current_date函数没有任何参数&#xff0c;因此只需简单地调用它即可获得系统当前日期。 以下是一个示例&#xff1a; select current_date;这将返回当前日期&#xff0c;例如…...

JAVA面试总结-Redis篇章(三)——缓存雪崩

JAVA面试总结-Redis篇章&#xff08;三&#xff09;——缓存雪崩...

maven编译报错

参考链接&#xff1a;mvn打包No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK_51CTO博客_mvn打包命令 在执行 yum install -y java-1.8.0-opensdk命令后&#xff0c;使用maven去编译打包&#xff0c;结果报错&#xff0c; …...

HPC集群调度系统和计算系统

什么是计算云&#xff1f; 所谓的计算云指的是为计算业务优化的类云基础架构&#xff0c;它强调用云的方式解决计算问题&#xff0c;而不是将“计算”搬到现有的公有云或者容器云上。 目前公有云或者容器云&#xff08;例如k8s&#xff09;上的HPC解决方案本质上都是将现有的H…...

数据结构之B树、B+树、B-树详解

B树、B树、B-树详解 目录 1. 引言2. B树&#xff08;B-Tree&#xff09; 2.1 定义2.2 特点2.3 操作2.4 应用场景 3. B树&#xff08;B Tree&#xff09; 3.1 定义3.2 特点3.3 操作3.4 应用场景 4. B-树&#xff08;B-Tree&#xff09; 4.1 定义4.2 特点4.3 操作4.4 应用场景 …...

Swagger Client 性能优化:10个技巧让你的 API 调用快如闪电

Swagger Client 性能优化&#xff1a;10个技巧让你的 API 调用快如闪电 【免费下载链接】swagger-js Javascript library to connect to swagger-enabled APIs via browser or nodejs 项目地址: https://gitcode.com/gh_mirrors/sw/swagger-js Swagger Client 是一款强大…...

BaiduNetdiskPlugin-macOS:解决百度网盘下载速度限制的实用优化方案

BaiduNetdiskPlugin-macOS&#xff1a;解决百度网盘下载速度限制的实用优化方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 在macOS环境下使用百度…...

Intv_ai_mk11 模型原理浅析:深入理解大语言模型背后的网络架构

Intv_ai_mk11 模型原理浅析&#xff1a;深入理解大语言模型背后的网络架构 1. 从简单对话到复杂生成&#xff1a;大语言模型的进化之路 想象一下你和朋友聊天的场景&#xff1a;你们能自然地理解对方的话&#xff0c;记住之前的对话内容&#xff0c;还能根据上下文给出恰当回…...

移动设备上实现实时人物移除的终极优化指南

移动设备上实现实时人物移除的终极优化指南 【免费下载链接】Real-Time-Person-Removal Removing people from complex backgrounds in real time using TensorFlow.js in the web browser 项目地址: https://gitcode.com/gh_mirrors/re/Real-Time-Person-Removal Real-…...

WindowResizer终极指南:三步解决Windows窗口无法调整大小的难题

WindowResizer终极指南&#xff1a;三步解决Windows窗口无法调整大小的难题 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 在日常使用Windows电脑时&#xff0c;你是否遇到过这样…...

Gemini助力Google Maps:开启智能出行新体验

Google Maps新成员Gemini&#xff1a;智能行程规划初体验 在Google Maps中&#xff0c;Gemini以“Ask Maps”的形式呈现&#xff0c;点击会弹出文本框。它能依据Google Maps的数据&#xff0c;结合用户评价来回答问题&#xff0c;还能从其他来源获取信息。测试中&#xff0c;让…...

千问3.5-2B参数详解:max_new_tokens=192如何平衡响应长度与推理延迟?实测数据

千问3.5-2B参数详解&#xff1a;max_new_tokens192如何平衡响应长度与推理延迟&#xff1f;实测数据 1. 模型概述 千问3.5-2B是Qwen系列中的小型视觉语言模型&#xff0c;具备图片理解与文本生成双重能力。这个2B参数的轻量级模型特别适合需要快速响应的应用场景&#xff0c;…...

Open Interpreter实时代码预览:沙箱模式部署详细说明

Open Interpreter实时代码预览&#xff1a;沙箱模式部署详细说明 1. 项目概述 Open Interpreter 是一个让人眼前一亮的开源工具&#xff0c;它能让你用平常说话的方式告诉AI要做什么&#xff0c;然后AI就会在你的电脑上直接写代码、运行代码&#xff0c;甚至帮你修改代码。想…...

深入Linux 0.11内核:从_syscall1宏到系统调用表的完整链路拆解

深入Linux 0.11内核&#xff1a;从_syscall1宏到系统调用表的完整链路拆解 在操作系统的演进历程中&#xff0c;系统调用机制始终扮演着用户程序与内核服务之间的关键桥梁角色。对于希望真正理解计算机系统底层运作的开发者而言&#xff0c;掌握系统调用的完整实现链路不仅是提…...