当前位置: 首页 > 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();}}
}

 

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

相关文章:

  • output delay 约束
  • html2Canvas+jsPDF 下载PDF 遇到跨域的对象存储的图片无法显示
  • 【C#】并行编程实战:异步流
  • 在家下载论文使用哪些论文下载工具比较好
  • 【LeetCode 算法】Handling Sum Queries After Update 更新数组后处理求和查询-Segment Tree
  • 基于Linux操作系统中的MySQL数据库SQL语句(三十一)
  • 【Matlab】基于BP神经网络的数据回归预测新数据(Excel可直接替换数据)
  • HTTPS连接过程中的中间人攻击
  • redis启动失败,oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
  • milvus: 专为向量查询与检索设计的向量数据库
  • 【C# 数据结构】Heap 堆
  • 智慧园区楼宇合集:数字孪生管控系统
  • Ajax 黑马学习
  • 软件应用开发的常见环境
  • Rust中的iter(), into_iter(), iter_mut()
  • [SQL挖掘机] - 日期函数 - current_date
  • JAVA面试总结-Redis篇章(三)——缓存雪崩
  • maven编译报错
  • HPC集群调度系统和计算系统
  • pg_archivecleanup清理wal日志
  • 继承中的访问级别
  • (学习日记)2023.06.09
  • 激光雷达-相机联合标定
  • [golang gin框架] 40.Gin商城项目-微服务实战之Captcha验证码微服务
  • 【LeetCode热题100】打卡第44天:倒数第30~25题
  • C# 匿名方法和Lambda表达式
  • uniapp微信小程序scroll-view滚动scrollLeft不准确
  • symfony/console
  • OSI模型简介及socket,tcp,http三者之间的区别和原理
  • 【leetcode】leetcode69 x的平方根