.NET高级面试指南专题二十五【 建造者模式介绍,将复杂对象的构建过程与其表示分离】

ops/2024/10/19 6:20:29/

建造者模式是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。它允许客户端通过指定要构建的类型和可选参数来构建对象,而不需要了解对象的具体构建细节。

优点:

  • 将构建过程封装在一个独立的构建者类中,使得客户端代码更加简洁和可读。
  • 可以轻松地构建不同表示的对象,因为客户端只需指定不同的构建者即可。
  • 提高了代码的灵活性,因为可以随时更改构建过程而不影响客户端。

缺点:

  • 增加了代码的复杂性,因为需要定义多个构建者类。
  • 如果产品类的属性较少或者变化不大,使用建造者模式可能会显得过度设计。

适用场景:

  • 当对象拥有复杂的构建过程,且需要将构建过程与表示分离时。
  • 当需要构建不同表示的同一类对象时。
  • 当对象的构建过程需要独立于其组装方式时。

代码示例:

using System;// 产品类
class Product
{public string Part1 { get; set; }public string Part2 { get; set; }public string Part3 { get; set; }public void Show(){Console.WriteLine($"Part1: {Part1}");Console.WriteLine($"Part2: {Part2}");Console.WriteLine($"Part3: {Part3}");}
}// 抽象建造者
interface IBuilder
{void BuildPart1();void BuildPart2();void BuildPart3();Product GetProduct();
}// 具体建造者A
class ConcreteBuilderA : IBuilder
{private Product product = new Product();public void BuildPart1(){product.Part1 = "Part A1";}public void BuildPart2(){product.Part2 = "Part A2";}public void BuildPart3(){product.Part3 = "Part A3";}public Product GetProduct(){return product;}
}// 具体建造者B
class ConcreteBuilderB : IBuilder
{private Product product = new Product();public void BuildPart1(){product.Part1 = "Part B1";}public void BuildPart2(){product.Part2 = "Part B2";}public void BuildPart3(){product.Part3 = "Part B3";}public Product GetProduct(){return product;}
}// 指挥者
class Director
{public void Construct(IBuilder builder){builder.BuildPart1();builder.BuildPart2();builder.BuildPart3();}
}class Program
{static void Main(string[] args){Director director = new Director();IBuilder builderA = new ConcreteBuilderA();director.Construct(builderA);Product productA = builderA.GetProduct();Console.WriteLine("Product A:");productA.Show();IBuilder builderB = new ConcreteBuilderB();director.Construct(builderB);Product productB = builderB.GetProduct();Console.WriteLine("\nProduct B:");productB.Show();}
}

http://www.ppmy.cn/ops/15748.html

相关文章

硬件知识学习 电感

1.电感的作用: 电感在电路中扮演着多样化的关键角色,其作用相当复杂且精细。以下是对电感作用的更详细解释: 滤波作用: 高频噪声抑制:电感能有效滤除电路中的高频噪声和杂波,使得输出端的信号更为平稳和稳定…

YMP实现Oracle迁移到YashanDB

迁移需求 ip地址 数据库信息 操作系统信息 源库 192.168.3.132 实例名topdh 用户密码TOPICIS/oracle 端口1521 Centos7.9 x86_64 目标库 192.168.3.175 实例名yasdb 用户密码topicist/opicis 端口1688 Centos7.9 x86_64 迁移前准备 YMP工具获取 根据实际需求向厂…

pandas保存dict字段再读取成DataFrame

背景: pandas DataFrame中有字段是dict类型,使用to_excel方法直接保存下次读取出来,dict字段会变成字符串,无法识别; 目标:保存dict字段,下次读出来还是dict 方法一:使用json.dum…

网络编程——TCP的特性之自动重传/流量控制/拥塞控制,一篇说清楚

文章目录 1. ARQ自动重传协议1.1 停止等待ARQ1.2 连续ARQ1.3 总结 2. TCP的流量控制3. TCP的拥塞控制3.1 慢开始算法3.2 拥塞避免算法3.3 快重传算法3.4 快恢复算法 1. ARQ自动重传协议 自动重传请求(Automatic Repeat-reQuest),通过使用确认…

DC学习笔记

视频 数字逻辑综合工具实践 DC 01_哔哩哔哩_bilibili 一、DC工作模式(此小节为搬运内容) 原链接:Design_Compiler User Guide 随手笔记(9)Using Floorplan Information - 知乎 DC拥有四种工作模式: 工…

(C++) share_ptr 之循环引用

文章目录 🚩前言🚩循环引用🕹️例子1Code😭shared_ptr (错误)😂weak_ptr (正确)😭unique_ptr (错误) 🕹️例子2Code &…

NLP——序列文本信息处理

序列文本信息处理是指对那些具有明确词序或结构顺序(如句子、段落、篇章等)的文本数据进行专门的分析和转换,以保留并利用其内在的时序或逻辑关系。在NLP中,处理序列文本信息通常涉及以下几个关键步骤: 分词&#xff0…

zabbix自动发现和自动注册

一、zabbix自动发现 1.1 确保客户端上的zabbix-agent2服务器状态正常 1.2 在web页面删除原有的客户端主机 1.3 在服务端和客户端上配置hosts 1.4 web端配置自动发现 二、zabbix自动注册 2.1 环境配置 2.2 修改zabbix-agent2配置文件 过滤非#或非¥开头的内容 2.3 we…