C#设计模式--建造者模式

C# 建造者模式(Builder Pattern)详细讲解 建造者模式(Builder Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这个模式主要应用于那些构建过程复杂且涉及多个步骤的场景,特别适合于需要灵活配置且逐步构建的对象。Car在本例中,我们要构建的产品是一个复杂的Car类。该类有多个部件和属性,包括引擎类型、车轮数量、是否有 GPS、是否有天窗等。set;set;set;set;CarEngine(引擎类型),Wheels(车轮数),HasGPS(是否有 GPS), 阅读详情

0.C#设计模式--简单工厂模式

1.C#设计模式--工厂方法模式

2.C#设计模式--抽象工厂模式

3.C#设计模式--单例模式

设计模式:

建造者模式(Builder Pattern)

简单介绍:

建造者模式参与者:

  • Builder:为创建一个Product对象的各个部件指定抽象接口;
  •  ConcreteBuilder

    ° 实现Builder的接口以构造和装配该产品的各个部件

    ° 定义并明确它所创建的表示

    ° 提供一个检索Product的接口

  •  Director:构造一个使用Builder接口的对象;
  • Product

    ° 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程

    ° 包含定义组成部件的类,包括将这些部件装配成最终产品的接口

  在建造者模式中,Director规定了创建一个对象所需要的步骤和次序,Builder则提供了一些列完成这些步骤的方法,ConcreteBuilder给出了这些方法的具体实现,是对象的直接创建者。

建造者模式类图:

 建造者模式c#代码举例:

 Product类 产品类

public class Product
    {
        private List<string> _parts = new List<string>();

        public void Add(string part)
        {
            _parts.Add(part);
        }

        public void Show()
        {
            Console.WriteLine("Product Parts");
            foreach (string part in _parts)
            {
                Console.WriteLine(part);
            }
        }
    }

Builder类 抽象接口类

/// <summary>
    /// 为创建一个Product对象的各个部件指定抽象接口
    /// </summary>
    public abstract class Builder
    {
        public abstract void BuildPart();
        public abstract Product GetResult();
    }

ConcreteBuilder类 具体创建者类

    public class ConcreteBuilder : Builder
    {
        private Product _product = new Product();

        public override void BuildPart()
        {
            _product.Add("Part");
        }

        public override Product GetResult()
        {
            return _product;
        }
    }

Director类 提供使用Builder类的接口

public class Director
    {
        /// <summary>
        /// 构造一个使用Builder接口的对象
        /// </summary>
        public void Construct(Builder builder)
        {
            builder.BuildPart();
        }
    }

测试代码:

    class Test
    {
        static void Main(string[] args)
        {
            // Create director and builders
            Director director = new Director();

            Builder b1 = new ConcreteBuilder();

            // Construct two products
            director.Construct(b1);
            Product p1 = b1.GetResult();
            p1.Show();

            Console.Read();
        }
    }

运行结果:

源代码工程文件下载


实例举例,手机生产举例  

  • Builder-->MobilePhoneBuilder
  •  ConcreteBuilder-->XiaoMIBuilder和AppleBuilder
  •  Director-->Factory
  • Product -->MobilePhone

分别有:手机品牌(brand),处理器(cup),运行内存(ram),外置内存(rom)信息

MobilePhone类产品类 

public class MobilePhone
    {
        private string _brand;
        private Dictionary<string, string> _Info = new Dictionary<string, string>();

        public string this[string key]
        {
            get { return _Info[key]; }
            set { _Info[key] = value; }
        }
        public MobilePhone(string brand)
        {
            this._brand = brand;
        }
        public void Show()
        {
            Console.WriteLine("\n-----Info--------");
            Console.WriteLine(" BRAND: {0}", _brand);
            Console.WriteLine(" CPU  : {0}", _Info["cpu"]);
            Console.WriteLine(" RAM  : {0}", _Info["ram"]);
            Console.WriteLine(" ROM  : {0}", _Info["rom"]);
        }
    }

MobilePhoneBuilder类 创建者抽象类

 public abstract class MobilePhoneBuilder
    {
        protected MobilePhone _mobilePhone;

       
        public MobilePhone mobilePhone
        {
            get { return _mobilePhone; }
        }

        // Abstract build methods
        public abstract void BuildCPU();
        public abstract void BuildRAM();
        public abstract void BuildROM();
        
    }

XiaoMIBuilder类 小米手机创建者类

public class XiaoMIBuilder:MobilePhoneBuilder
    {
        public XiaoMIBuilder()
        {
            _mobilePhone = new MobilePhone("小米5s");
        }
        public override void BuildCPU()
        {
            _mobilePhone["cpu"] = "骁龙821";
        }

        public override void BuildRAM()
        {
            _mobilePhone["ram"] = "4G";
        }

        public override void BuildROM()
        {
            _mobilePhone["rom"] = "32G";
        }
    }

AppleBuilder类 苹果手机的具体创建类

public class AppleBuilder:MobilePhoneBuilder
    {
        public AppleBuilder()
        {
            _mobilePhone = new MobilePhone("iphone7s plus");
        }
        public override void BuildCPU()
        {
            _mobilePhone["cpu"] = "A10";
        }

        public override void BuildRAM()
        {
            _mobilePhone["ram"] = "2G";
        }

        public override void BuildROM()
        {
            _mobilePhone["rom"] = "128G";
        }
    }

Factory类,提供创建者的接口

    public class Factory
    {
        public void Construct(MobilePhoneBuilder mobilePhoneBuilder)
        {
            mobilePhoneBuilder.BuildCPU();
            mobilePhoneBuilder.BuildRAM();
            mobilePhoneBuilder.BuildROM();
        }
    }

测试代码:

    class Test
    {
        static void Main(string[] args)
        {
            MobilePhoneBuilder builder;
            Factory factory = new Factory();

            builder = new XiaoMIBuilder();
            factory.Construct(builder);
            builder.mobilePhone.Show();

        
            builder = new AppleBuilder();
            factory.Construct(builder);
            builder.mobilePhone.Show();

            Console.Read();
        }
    }

运行结果:

 

源代码工程文件下载

C#中使用建造者模式构建对象 C#中使用建造者模式构建对象在C#开发中,为了简化代码的复杂度,我们经常使用设计模式来提高开发效率。其中建造者模式(Builder Pattern)是一种十分常用的创建型设计模式,它可以将一个复杂对象的构造和表示分离开来,并允许按照不同的方式构造对象。下面我们就来学习如何使用建造者模式来构建对象。 阅读详情

相关推荐

保姆级教程:手把手教你为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)

本文提供了一份详细的教程,指导开发者如何为STM32F407和W25Q128制作Keil MDK的SPI Flash下载算法(FLM文件)。从理解下载算法的核心机制到实现FlashPrg.c的核心操作,再到链接脚本与地址映射实战,手把手教你完成定制化SPI Flash下载算法的开发与优化。

weixin_28716769的博客 409

C#设计模式之---建造者模式

建造者模式(Builder Pattern)是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式使得建造代码与表示代码的分离,可以使客户端不必知道产品内部组成的细节,从而降低了客户端与具体产品之间的耦合度。使用多个简单的对象一步一步构建成一个复杂的对象。属于创建型模式,它提供了一种创建对象的最佳方式。

风清扬的专栏 964

SAP中错记虚拟利润中心的调整,冲销处理实例

我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 1799

C# 创建型设计模式----建造者模式

建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。通俗点说就是将一个复杂的对象拆分成一个一个零件,然后按照既定顺序和规则进行组装,最终形成这个相对复杂的对象。相当于组装。:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。建造者模式的使用需要考虑其复杂性,如果产品结构较简单,使用此模式可能会增加系统的复杂性。客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦。

qq_44217121的博客 1015

STM32F407通过SMBus协议精准读取BQ40Z50电池电量

本文详细介绍了STM32F407通过SMBus协议精准读取BQ40Z50电池电量的实现方法。从硬件连接到软件驱动开发,再到通信异常排查,提供了完整的解决方案。重点解析了SMBus协议的特殊时序要求、GPIO模拟驱动的关键代码,以及实际调试中的常见问题与对策,帮助开发者高效完成电池管理系统开发。

weixin_29189003的博客 253

别再硬啃理论了!手把手教你用Simulink搭VSG并网模型,模拟线路故障(含三相故障模块详解)

本文提供了一份详细的Simulink VSG并网模型搭建指南,特别聚焦于三相故障模块的配置与仿真。通过逐步指导,帮助电力电子工程师掌握从基础电路搭建到复杂故障模拟的全流程,包括单相接地、两相短路等典型故障的波形分析与参数设置技巧,有效弥合理论与实践的鸿沟。

weixin_29057237的博客 319

【设计模式】建造者模式(C#)

C#实现建造者模式

baidu_33146219的博客 5870

YOLOv8中的可变形卷积改进 | 从DCNv1到DCNv3的多位置替换可变形卷积保姆级实操

可变形卷积(Deformable Convolution)最早由Dai等人在2017年提出,其核心思想是在标准卷积操作的基础上,引入可学习的偏移量(offsets),使卷积核能够自适应调整其采样位置,从而增强模型对目标变形的感知能力。return x本文通过深入探讨可变形卷积在YOLOv8中的应用,详细介绍了DCNv1、DCNv2和DCNv3的原理和实现,并通过实验验证了其在目标检测任务中的有效性。未来,我们将继续探索更多优化策略和技术,提升YOLOv8模型的性能,以应对更复杂的目标检测任务。

一键难忘的博客 4052

【C#设计模式】3.建造者模式(Builder Pattern)【创建型】

1.1 动机(Motivate) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变? 1.2 意图(Intent) 将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。...............

星Yeah 的博客 4230

腾讯音乐 QQ音乐商业化客户端开发工程师:岗位深度解析与面试攻略

腾讯音乐QQ音乐商业化客户端开发工程师岗位要求3年以上Android开发经验,熟练掌握Kotlin/Java及跨端开发技术。核心职责包括QQ音乐客户端功能开发、架构优化、性能提升及技术攻关。岗位要求计算机相关本科以上学历,具备完整项目开发经验,熟悉TCP/IP等网络协议,能独立解决复杂技术问题。面试重点考察项目经验、架构设计、性能优化及新技术研究能力,建议候选人准备具体案例,量化成果,并熟悉Flutter等跨端技术。该职位强调技术深度与产品思维的结合,需展现扎实的编程基础、问题解决能力和团队协作精神。

郑伟强dev的专栏 368

【硬刚Hadoop】HADOOP MAPREDUCE(1):概述

本文是对《【硬刚大数据之学习路线篇】从零到大数据专家的学习指南(全面升级版)》的Hadoop部分补充。 1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上。 2MapReduce优缺点 2.1 优点 1)MapReduce易于编程 它简单的实现一些接口,就可以完成一个分布式程序..

微信搜:import_bigdata,大数据领域硬核原创作者 465

C# 设计模式:第三章 创建者模式 之 建造者模式(Builder Pattern)

在这章中,我们学习了建造者模式的基本概念、应用场景、实现方法以及注意事项。建造者模式允许你分步骤地构建复杂对象,而不需要一次性完成所有操作。它在简化复杂对象的创建、避免构造函数的参数爆炸和支持多态性方面有着重要的作用。我们通过两个实际的代码示例展示了如何在 C# 中实现建造者模式,包括基本建造者模式和披萨建造者模式。最后,我们还讨论了一些使用建造者模式时需要注意的地方,帮助你在实际开发中做出明智的选择。

caifox的博客 1130

使用geneHapR进行基因单倍型分析(以vcf文件为例)

如下图所示,可以看到,用户需要准备的包括:基因型文件、注释文件和样本信息文件,以及后续会用的表型文件。输出的主要内容有:变异位点的可视化、单倍型网络、地理分布、表型比较和连锁不平衡热图。geneHapR的工作流程。

沉香best的博客 5941

C# 设计模式--建造者模式 (Builder Pattern)

建造者模式是一种创建型设计模式,它允许你逐步构建复杂对象,而无需使用多个构造函数或重载。建造者模式将对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。建造者模式通过将对象的构建过程分解为多个方法调用,使得对象的创建更加灵活和可控。虽然它增加了系统的复杂度,但在需要逐步构建复杂对象的场景中,建造者模式能够显著提高代码的可维护性和扩展性。

仰望星空的人 861

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C#设计模式之建造者模式(Builder Pattern)

1:引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死采购员了,这里就可以采用建造者模式来解决这个问题,我们可以把电脑的各个组件的组装过程封装到一个...

不求上进的码农的博客 241

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C#设计模式之建造者模式(Builder Pattern)

模式解释:         将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 模式类型: 创造类模式。 使用时机:        对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只

donnie88888888的专栏 854

C#设计模式(5)——建造者模式(Builder Pattern)

C#设计模式(5)——建造者模式(Builder Pattern) 一、引言   在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电...

fgmah2000的博客 213

C# 设计模式(创建型模式):建造者模式

建造者模式是一个非常强大的设计模式,它帮助我们在构建复杂对象时提供了一种灵活且可扩展的方式。通过将构建的各个步骤独立开来,我们不仅提高了代码的复用性,也使得系统在面对不同的需求变化时更加灵活。在C#开发中,建造者模式常用于创建具有多个部件的对象,特别适合于那些需要根据不同条件创建不同对象的场景。它不仅可以让对象的构建过程独立于其表示,而且可以使得对象的构建过程更加灵活和可定制化。该模式的主要目的是将对象的构建过程与表示解耦,使得同样的构建过程可以创建不同的表示。假设我们要构建一个复杂的。

玉面小浪君的博客 1313

C# -- 设计模式 -- Builder Pattern 建造者模式

小标题: <font color=#33a3dc size=4 > 优点:</font> 重点提醒1 重点提醒2 <font color= #d2553d>重点提醒1</font> <font color=red size=3 face="微软雅黑">重点提醒2</font> 举例 <font color= #7fb80e size=3>举例</font> ...

M1234uy的博客 498

建造者模式(Builder Pattern)——C#设计模式五

一、引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成。例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由CPU、主板、硬盘、显卡、机箱等组装而成的,如果此时让采购员一台一台电脑去组装的话真是要累死采购员了,这里就可以采用建造者模式来解决这个问题,我们可以把电脑的各个组件的组装过程封装到一个建造者类...

U3D开发 222

C#-设计模式-建造者模式

在这个例子中,电脑城的老板是直接与客户(也就是指采购员)联系的,然而电脑的组装是由老板指挥装机人员去把电脑的各个部件组装起来,真真负责创建产品(这里产品指的就是电脑)的人就是电脑城的装机人员。/// 以组装电脑为例子/// 每台电脑的组成过程都是一致的,但是使用同样的构建过程可以创建不同的表示(即可以组装成不一样的电脑,配置不一样)/// 组装电脑的这个场景就可以应用建造者模式来设计namespace 设计模式之建造者模式/// 客户类// 客户找到电脑城老板说要买电脑,这里要装两台电脑。

Asincereman的专栏 1308

23种设计模式之《建造者模式(Builder)》在c#中的应用及理解

建造者模式通过将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式特别适用于构建复杂对象,尤其是当对象的构建过程需要多个步骤时。通过使用建造者模式,你可以更灵活地控制对象的构建过程,并且可以轻松地扩展系统以支持新的产品类型。

yuanpan的专栏 897

C#设计模式读书笔记之建造者模式(Builder Pattern)

建造者模式(Builder Pattern)【使用频率:★★☆☆☆】 1. 概述   将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。在建造者模式的定义中提到了复杂对象,那么什么是复杂对象?简单来说,复杂对象是指那些包含多个成员属性的对象。 建造者模式与抽象工厂模式有点相似,但是建造者模式返回一个完整的复杂产品,而抽象工厂模式返回一系列...

qq826364410的专栏 301

设计模式之 建造者模式 C# 范例

set;set;set;set;指挥者(Director)负责使用建造者(Builder)构建产品。

搁浅的博客 717
上一篇: C#设计模式--单例模式
下一篇: C#设计模式--原型模式
JiYF
博客等级 码龄11年 356粉丝 50原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值