首页 > 其他分享 >BuilderPattern-构建器模式

BuilderPattern-构建器模式

时间:2023-08-08 22:44:22浏览次数:31  
标签:BuilderPattern Console computerPackage RAM 模式 CPU 构建 WriteLine public

在C#中,构造器模式(Builder Pattern)是一种创建型设计模式,用于创建一个复杂对象的过程,并将其分解为多个简单步骤进行创建。与其他创建型模式(如工厂模式)不同,构造器模式着重于对象的构建过程,而不是直接创建对象。

构造器模式通常由以下几个关键组件组成:

产品类(Product):表示构造器模式中所要创建的复杂对象的最终产物。产品类通常包含多个属性,这些属性在构造过程中逐步赋值。

构造器接口(Builder):定义了创建产品的各个步骤,包含各种构建方法来设置产品的属性。通常还要有一个获取产品的方法。

具体构造器类(Concrete Builder):实现了构造器接口,并负责实际的产品构建过程。在每个构造方法中设置产品的属性。

指导类(Director):负责组织构造器的调用顺序,指导具体构造器类如何构建产品。

class ComputerPackage
{
    public string CPU { get; set; }
    public string RAM { get; set; }
    public string Storage { get; set; }
}
// 产品类
class Computer
{
    public Computer(ComputerPackage computerPackage)
    {
        this.computerPackage = computerPackage;
    }
    public ComputerPackage computerPackage { get; set; }
    public string Brand { get; set; }
}
// 构造器接口
abstract class IComputerBuilder
{
    public abstract void SetCPU();
    public abstract void SetRAM(string ram);
    public abstract void SetStorage(string storage);
    public abstract Computer GetComputer();
}
// 具体构造器类
class LenovoComputer : IComputerBuilder
{
    private ComputerPackage computerPackage = new ComputerPackage();
    public override void SetCPU()
    {
        computerPackage.CPU = "Intel Core i7";
        Console.WriteLine("{0} build CPU {1}", this.GetType().Name, computerPackage.CPU);
    }

    public override void SetRAM(string ram)
    {
        computerPackage.RAM = ram;
        Console.WriteLine("{0} build RAM {1}", this.GetType().Name, ram);
    }

    public override void SetStorage(string storage)
    {
        computerPackage.Storage = storage;
        Console.WriteLine("{0} build RAM {1}", this.GetType().Name, storage);
    }

    public override Computer GetComputer()
    {
        SetCPU();
        Console.WriteLine("{0} 组装 {1} {2} {3}", this.GetType().Name, computerPackage.CPU, computerPackage.RAM, computerPackage.Storage);
        return new Computer(computerPackage)
        {
            Brand = "联想"
        };
    }
}
class MacComputer : IComputerBuilder
{
    private ComputerPackage computerPackage = new ComputerPackage();
    public override void SetCPU()
    {
        computerPackage.CPU = "M1";
        Console.WriteLine("{0} build CPU {1}", this.GetType().Name, computerPackage.CPU);
    }

    public override void SetRAM(string ram)
    {
        computerPackage.RAM = ram;
        Console.WriteLine("{0} build RAM {1}", this.GetType().Name, ram);
    }

    public override void SetStorage(string storage)
    {
        computerPackage.Storage = storage;
        Console.WriteLine("{0} build RAM {1}", this.GetType().Name, storage);
    }

    public override Computer GetComputer()
    {
        SetCPU();
        Console.WriteLine("{0} 组装 {1} {2} {3}", this.GetType().Name,computerPackage.CPU, computerPackage.RAM, computerPackage.Storage);
        return new Computer(computerPackage)
        {
            Brand = "苹果"
        };
    }
}
class Director
{
    private IComputerBuilder builder = null;
    public Director(IComputerBuilder builder)
    {
        this.builder = builder;
    }

    public Computer BuildComputer()
    {
        builder.SetRAM("16GB");
        builder.SetStorage("1TB SSD");
        return builder.GetComputer();
    }
}
static void Main(string[] args)
{
    IComputerBuilder builder = new LenovoComputer();
    Director director = new Director(builder);
    Computer computer = director.BuildComputer();
    Console.WriteLine($"CPU: {computer.computerPackage.CPU}");
    Console.WriteLine($"RAM: {computer.computerPackage.RAM}");
    Console.WriteLine($"Storage: {computer.computerPackage.Storage}");

    IComputerBuilder builder1 = new MacComputer();
    Director director1 = new Director(builder1);
    Computer computer1 = director1.BuildComputer();
    Console.WriteLine($"CPU: {computer1.computerPackage.CPU}");
    Console.WriteLine($"RAM: {computer1.computerPackage.RAM}");
    Console.WriteLine($"Storage: {computer1.computerPackage.Storage}");

    Console.Read();
}

 构造器模式将对象构建过程代码从上端代码中剥离,上端代码不需要知道对象构建的过程,只需要拿到想要的对象即可。

标签:BuilderPattern,Console,computerPackage,RAM,模式,CPU,构建,WriteLine,public
From: https://www.cnblogs.com/ZHIZRL/p/17615289.html

相关文章

  • 代理模式
    静态代理静态代理:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。设计思路:定义一个抽象角色,让代理角色和真实角色分别去实现它。1.抽象角色:声明真实对象和代理对......
  • 迭代器模式
    我们登上并非我们选择的舞台,演出并非自己选择的剧本。——爱比荷泰**迭代器模式:**提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访......
  • 责任链模式
    **责任链模式:**使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。组成:抽象处理者角色(Handler):它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。......
  • vue3 + h5 构建流程
    目录目录初始化项目架构技术栈工具类环境搭建流程初始化项目初始化git运行项目配置server环境vite.config.ts配置项目环境增加三个文件修改package.json脚本如何使用重新启动配置Eslint增加文件.eslintrc.cjs对vite.config.ts修改重新启动......
  • SQlLite Wal 模式
    QLiteWAL(Write-AheadLogging)模式主要有以下几个优点:1.提高写入性能WAL模式将数据先写入日志文件,然后再定期更新到实际数据文件中。这避免了每次写入都要同步更新数据文件,大大提升了写入速度。2.提高并发性能WAL模式采用乐观锁并发控制,允许在同一数据库的多个连接中同......
  • mongodb副本集模式的单机部署+修改ip
    环境:OS:Centos7mongodb:4.4.22 1.解压[root@localhostsoft]#tar-xvfmongodb-linux-x86_64-rhel70-4.4.22.tgz[root@localhostsoft]#mvmongodb-linux-x86_64-rhel70-4.4.22/usr/local/services/mongodb 2.创建目录mkdir-p/home/middle/mongodb/data/mkdir-p/ho......
  • 设计模式 solid原则
    SOLID原则是一组面向对象设计和编程的原则,旨在提供可维护、可扩展和可重用的代码。下面是SOLID原则的简要介绍:单一职责原则(SingleResponsibilityPrinciple,SRP):一个类应该只有一个引起变化的原因。换句话说,一个类应该只负责一个单一的功能或职责。开放封闭原则(Open-ClosedP......
  • kube-proxy 三种模式分析
    kube-proxy三种模式分析kubernetes上面的service资源的实现方式是由kube-proxy提供的模式决定的kube-proxy提供三种模式:userspace(Kubernetes1.2版本之前)、iptables、ipvs(推荐的)如果不满足ipvs时,会自动降为iptables模式再讲三种模式前,先简单说下Service的工作原理;在......
  • 中电金信发布源启·数字构建平台 全面跃升应用研发全生命周期数字生产力
    6月28日,中电金信发布源启·数字构建平台。源启·数字构建平台是企业级研发全生命周期支持管理平台、工程平台、工具链平台。面向金融等重点行业超大规模、超复杂度的数字化应用,源启·数字构建平台通过灵活、强大的平台赋能,端到端支持应用研发全生命周期实现,让金融机构及大型企业......
  • maven构建非法字符解决办法
    使用maven做版本构建时候碰到了一个问题,有个java源码始终编译报错,错误发生在文件第一行。出错内容是:***.java:[1,1]非法字符:\65279 此问题是文件编码问题。这一个java文件的编码格式是UTF-8BOM格式的。其它源码的编码格式都正常。修改方法具体如下:先在eclipse的projec......