返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#通过Builder模式造车
  • 114
分享到

C#通过Builder模式造车

C#Builder模式 2022-11-13 19:11:07 114人浏览 薄情痞子
摘要

Builder模式也可以造车。 对于Builder模式来说,首相要把要造的车确定下来: public class Car { public strin

Builder模式也可以造车。

对于Builder模式来说,首相要把要造的车确定下来:

    public class Car
    {
        public string Model { get; set; }
        public string Engine { get; set; }
        public string Transmission { get; set; }
        public string Body { get; set; }
        public int Doors { get; set; }
        public List<string>  Accessories { get; set; }
        public Car()
        {
            Accessories = new List<string>();
        }
        public void ShowCarInfo()
        {
            Console.WriteLine(Model);
            Console.WriteLine(Engine);
            Console.WriteLine(Body);
            Console.WriteLine("门的数量:" + Doors);
            Console.WriteLine(Transmission);
            Console.WriteLine("配置为:");
            foreach (var accessory in Accessories)
            {
                Console.WriteLine("\t{0}", accessory);
            }
        }
    }

这个Car可以交给Builder1也可以交给Builder2,等等,但首先需要提炼出Builder们的一个抽象类。这个抽象Builder可以设置和获取Car,并提供生产Car各个部件的抽象方法。

   public abstract class CarBuilder
    {
        protected Car _car;
        public Car GetCar()
        {
            return _car;
        }
        public void SetCar()
        {
            _car = new Car();
        }
        public abstract void SetModel();
        public abstract void SetEngine();
        public abstract void SetTransmission();
        public abstract void SetBody();
        public abstract void SetDoors();
        public abstract void SetAccessories();
    }

然后,就需要一个具体的Builder来派生抽象Builder。

  public class BuilderOne : CarBuilder
    {
        public override void SetEngine()
        {
            _car.Engine = "发动机1";
        }
        public override void SetModel()
        {
            _car.Model = "型号1";
        }
        public override void SetTransmission()
        {
            _car.Transmission = "变速1";
        }
        public override void SetBody()
        {
            _car.Body = "SUV";
        }
        public override void SetAccessories()
        {
            _car.Accessories.Add("内饰");
            _car.Accessories.Add("外饰");
        }
        public override void SetDoors()
        {
            _car.Doors = 6;
        }
    }

这个抽象Builder的派生类可能有很多,所以需要一个管理这些派生Builder的类,用来决定到底选用哪个Builder来生产。

   public class BuilderManager
    {
        private readonly CarBuilder _carBuilder;
        public BuilderManager(CarBuilder carBuilder)
        {
            _carBuilder = carBuilder;
        }
        public void BuildCar() 
        {
            _carBuilder.SetCar();
            _carBuilder.SetModel();
            _carBuilder.SetEngine();
            _carBuilder.SetBody();
            _carBuilder.SetDoors();
            _carBuilder.SetTransmission();
            _carBuilder.SetAccessories();
        }
        public Car GetCar()
        {
            return _carBuilder.GetCar();
        }
    }

在客户端,如果需要造车,就找Builder的管理类,通过它的构造函数传入具体的Builder。

    class Program
    {
        static void Main(string[] args)
        {
            var builderManager = new BuilderManager(new BuilderOne());
            builderManager.BuildCar();
            var car = builderManager.GetCar();
            car.ShowCarInfo();
            Console.ReadKey();
        }
    }

抽象工厂和Builder模式都可以造车,但两者有也许的不同:   

  • 抽象工厂模式相当于为车找了一个专属工厂,要求工厂只能造这种类型的车
  • Builder模式相当于为车找不同的工厂,不同的工厂生产出来的车型都不一样

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对编程网的支持。如果你想了解更多相关内容请查看下面相关链接

--结束END--

本文标题: C#通过Builder模式造车

本文链接: https://lsjlt.com/news/170435.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#通过Builder模式造车
    Builder模式也可以造车。 对于Builder模式来说,首相要把要造的车确定下来: public class Car { public strin...
    99+
    2022-11-13
    C# Builder模式
  • C#通过抽象工厂模式造车
    可以用抽象工厂模式来造车。 车的品牌有很多,而且车的属性也不少,比如车的类型、排量、门的数量,等等。可以提炼出有关车的一个抽象类: public abstract class...
    99+
    2022-11-13
    C# 抽象工厂模式 造车
  • 当构造方法的参数过多时怎么使用builder模式
    这篇文章将为大家详细讲解有关当构造方法的参数过多时怎么使用builder模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、传统方式的缺点1、可伸缩构造方...
    99+
    2024-04-02
  • Java链式编程与Builder(建造者)设计模式
    一、链式编程 1.1.释义          链式编程,也叫级联式编程,调用对象的函数时返回一个this对象指向对象本身,达到链式效果,可以级联调用。  1.2.特点          可以通过一个方法调用多个方法,将多个方法调用链接起来,...
    99+
    2023-09-25
    java 开发语言
  • .Net创建型设计模式之建造者、生成器模式(Builder)
    目录一、动机(Motivation)二、意图(Intent)三、结构(Structure)四、模式的组成五、建筑者模式的具体实现六、建造者模式的实现要点1、建造者模式的优点:2、建造...
    99+
    2024-04-02
  • C#设计模式之建造者模式
    场景:我们的冒险家,现在需要去武器商店买一把兵器,有刀和剑两种武器,冒险者可以告诉武器商人需要哪一种武器,然后武器商人进行锻造,最后把产品给冒险者,用建造者模式如何实现? 1.什么是...
    99+
    2024-04-02
  • C#中通过Command模式实现Redo/Undo方案
    一个比较常见的改进用户体验的方案是用Redo/Undo来取代确认对话框,由于这个功能比较常用,本文简单的给了一个在C#中通过Command模式实现Redo/Undo方案的例子,以供后...
    99+
    2024-04-02
  • C#怎么实现建造者模式
    这篇文章主要介绍“C#怎么实现建造者模式”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么实现建造者模式”文章能帮助大家解决问题。场景:我们的冒险家,现在需要去武器商店买一把兵器,有刀和剑两种武...
    99+
    2023-07-02
  • Java通俗易懂系列设计模式之建造者模式
    目录介绍意图定义实例使用场景JDK中的Builder设计模式示例总结介绍 今天我们将研究java中的Builder模式。Builder 设计模式是一种创造性的设计模式,如工厂模式和抽...
    99+
    2024-04-02
  • 通过通道处理 HTTP 请求的模式
    从现在开始,我们要努力学习啦!今天我给大家带来《通过通道处理 HTTP 请求的模式》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎...
    99+
    2024-04-05
  • python 通过dict(zip)和{}的方式构造字典的方法
    在python中,通常通过dict和zip组合来构建键值对。 比如: aid = [i for i in range(10)] name = [[1] * 3] * len(aid)...
    99+
    2024-04-02
  • C#通过GET/POST方式发送Http请求
    目录两者的区别:参数传输数据的大小 安全性 Get请求 Post请求 介绍http请求的两种方式,get和post方式。并用C#语言实现,如何请求url并获取返回的数据 两者的区别:...
    99+
    2024-04-02
  • C++怎么通过模板实现元素的反序
    这篇文章主要介绍“C++怎么通过模板实现元素的反序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++怎么通过模板实现元素的反序”文章能帮助大家解决问题。模板概念首先模板分为函数模板和类模板想到模板...
    99+
    2023-07-02
  • C语言模拟实现通讯录程序过程
    目录一、前言二、正文1.大体框架2.界面显示3. 创建通讯录4.初始化通讯录5.增加联系人6.显示联系人7. 删除联系人8.查找联系人9.修改联系人10. 排序联系人一、前言 在上一...
    99+
    2023-02-14
    C语言模拟实现通讯录 C语言模拟通讯录 C语言通讯录
  • JavaScript 构造函数模式:从入门到精通的进阶指南
    ...
    99+
    2024-04-02
  • C语言通过案例讲解并发编程模型
    目录1、按照指定的顺序输出2、生产者消费者模型3、读写锁下面代码、思路等来源于b站郭郭 和CSAPP样例,同时希望大家好好读一下CSAPP的内容,真的讲的很好 1、按照指定的顺序输出...
    99+
    2024-04-02
  • C++深入探究二阶构造模式的原理与使用
    目录一、构造函数的回顾二、半成品对象三、二阶构造四、小结一、构造函数的回顾 关于构造函数 类的构造函数用于对象的初始化构造函数与类同名并且没有返回值构造函数在对象定义时自动被调用 问...
    99+
    2024-04-02
  • C++详解如何通过模板实现元素的反序
    目录所涉知识点模板概念示例代码开发环境运行结果注意所涉知识点 阅读此文需要掌握的知识点:回调函数,模板类,类模板,栈。 模板概念 首先模板分为函数模板和类模板 想到模板,就会联想到泛...
    99+
    2024-04-02
  • MySQL在ROW模式下如何通过binlog提取SQL语句
    小编给大家分享一下MySQL在ROW模式下如何通过binlog提取SQL语句,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! Linux基于row模式的binlo...
    99+
    2024-04-02
  • Java怎么通过装饰器模式扩展系统功能
    这篇文章主要介绍“Java怎么通过装饰器模式扩展系统功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java怎么通过装饰器模式扩展系统功能”文章能帮助大家解决问题。装饰器模式概述装饰模式可以在不改...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作