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

C# 建造者模式(Builder Pattern)

建造者模式(Builder Pattern),也被称为生成器模式,是一种对象构建模式,旨在将复杂对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。这种模式特别适用于构建具有多个组成部分的复杂对象,且这些组成部分的创建和组装方式相对独立。

public class BuilderPatternTest
{public void Main(){var director = new Director();//指挥者1var director1 = new Director1();//指挥者2var desktopBuilder = new DesktopBuilder();//建造者1var desktopBuilder2 = new DesktopBuilder2();//建造者2//第一台电脑,使用指挥者1,使用建造者1var computer1 = director.Construct(desktopBuilder);Console.WriteLine(computer1.ToString());//第二台电脑,使用指挥者2,使用建造者2var computer2 = director1.Construct(desktopBuilder);Console.WriteLine(computer2.ToString());//第三台电脑,使用指挥者1,使用建造者2var computer3 = director.Construct(desktopBuilder2);Console.WriteLine(computer3.ToString());//第四台电脑,使用建造者1,不使用指挥者var computer4 = new DesktopBuilder().SetType("平板电脑").SetRam(256).SetProcessor("i13212").Build();Console.WriteLine(computer4.ToString());}
}// 定义产品类
public class Computer
{public string Type { get; }public bool IsGraphicsCardIncluded { get; }public int Ram { get; }public string Processor { get; }public Computer(string type, bool isGraphicsCardIncluded, int ram, string processor){Type = type;IsGraphicsCardIncluded = isGraphicsCardIncluded;Ram = ram;Processor = processor;}public override string ToString(){return $"Type: {Type}, Graphics Card: {IsGraphicsCardIncluded}, RAM: {Ram}GB, Processor: {Processor}";}
}// 抽象建造者
// 也可以使用接口实现抽象建造者
// 方法中返回自身,以便链式调用
public abstract class Builder
{protected string Type;protected bool IsGraphicsCardIncluded;protected int Ram;protected string Processor;public abstract Computer Build();public virtual Builder SetType(string type){return this;}public virtual Builder SetGraphicsCard(bool isGraphicsCardIncluded){return this;}public virtual Builder SetRam(int ram){return this;}public virtual Builder SetProcessor(string processor){return this;}
}// 具体建造者
public class DesktopBuilder : Builder
{public override Computer Build(){return new Computer(Type, IsGraphicsCardIncluded, Ram, Processor);}public override DesktopBuilder SetType(string type){Type = type;return this;}public override DesktopBuilder SetGraphicsCard(bool isGraphicsCardIncluded){IsGraphicsCardIncluded = isGraphicsCardIncluded;return this;}public override DesktopBuilder SetRam(int ram){Ram = ram;return this;}public override DesktopBuilder SetProcessor(string processor){Processor = processor;return this;}
}public class DesktopBuilder2 : Builder
{public override Computer Build(){return new Computer(Type, IsGraphicsCardIncluded, Ram, Processor);}public override DesktopBuilder2 SetType(string type){Type = type;return this;}public override DesktopBuilder2 SetGraphicsCard(bool isGraphicsCardIncluded){IsGraphicsCardIncluded = isGraphicsCardIncluded;return this;}public override DesktopBuilder2 SetRam(int ram){Ram = ram;return this;}
}// 导演类
public class Director
{public Computer Construct(Builder builder){builder.SetType("台式电脑");builder.SetGraphicsCard(true);builder.SetRam(16);builder.SetProcessor("i7");return builder.Build();}
}public class Director1
{public Computer Construct(Builder builder){builder.SetType("笔记本电脑");builder.SetGraphicsCard(true);builder.SetRam(128);builder.SetProcessor("i1000");return builder.Build();}
}

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

相关文章:

  • 初阶数据结构速成
  • nx上darknet的使用-目标检测-在python中的使用
  • Python高级(四)_内存管理
  • 关键路径-matlab
  • JavaDS —— 单链表 与 LinkedList
  • LangChain —— Message —— how to filter messages
  • conda install问题记录
  • 【python】IPython的使用技巧
  • 常用知识点问答
  • paddlenlp cpu windows 下测试gpt
  • uboot的功能
  • java导出word实现
  • Flink 提交作业的方式
  • JVM系列 | 垃圾收集算法
  • 深入理解Spring Boot中的事件驱动架构
  • Moldflow安装包下载:附网盘地址+详细教程步骤
  • 2024辽宁省数学建模B题【钢铁产品质量优化】思路详解
  • C++基础入门(上)
  • 基于深度学习的情感分析
  • mybatis 延迟加载
  • 使用QT5.14.2开发族谱管理软件过程记录
  • 【QT】布局管理器
  • 兼容问题---ios底部的安全距离css设置
  • python JSON Lines (JSONL)的保存和读取;jsonl的数据保存和读取,大模型prompt文件保存常用格式
  • Spring Boot中@Async注解的使用及原理 + 常见问题及解决方案
  • ubuntu基于cmakelist的Qt工程,如何将图片打包进二进制程序
  • Spring的启动流程refresh方法、配置类解析流程@Component、@Configuration、@Import、@Bean
  • 运算放大器(2)
  • 智能优化算法之模拟退火算法SA
  • 同时用到,网页,java程序,数据库的web小应用