设计模式 | 建造者模式

设计模式 | 建造者模式

首页休闲益智点击建造者更新时间:2024-05-11

建造者模式是一种对象创建型模式,它将客户端与包含多个部件的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。建造者模式关注如何逐步创建一个复杂的对象,不同的建造者定义了不同的创建过程,且具体建造者相互独立,且更换建造者和增加建造者非常的方便,系统具有较好的扩展性。

1 | 建造者模式概述

无论是在现实世界中还是软件系统中,都存在一些复杂的对象,他们拥有多个组成部分(部件),例如汽车,它包括车轮、方向盘、发动机等多种部件。对于大多数用户而言,并不知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车。

思考:面对上面这种场景,如何将这些部件组装成一辆完整的汽车并返回给用户,而这种场景恰好就是建造者模式需要解决的问题。建造者模式可以将部件本身和它们的组装过程分开,关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而无需知道其内部的具体构建细节。

1.1 建造者模式的定义

建造者模式是一种对象创建型模式,它将客户端与包含多个部件的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。建造者模式关注如何逐步创建一个复杂的对象,不同的建造者定义了不同的创建过程,且具体建造者相互独立,且更换建造者和增加建造者非常的方便,系统具有较好的扩展性。

2 | 建造者模式的结构与实现2.1 建造者模式的结构2.2 建造者模式的实现

在构建模式的定义中提到了复杂对象,那什么是复杂对象呢?简单来说,复杂对象是指包含多个成员变量的对象,这些成员对象也称为部件或零件。举例:

建造者模式的代码设计

using System; namespace BuilderPattern { class Program { static void Main(string[] args) { Console.WriteLine("Hello BuilderPattern!"); { Builder builder = new ConcreteBuilder1(); Director director = new Director(builder); Product product = director.Construct(); //构建复杂对象 Console.WriteLine($"【复杂对象】=> PartA:{product.PartA},PartB:{product.PartB},PartC:{product.PartC}"); } } } #region BuilderPattern-Demo /// <summary> /// 产品 /// </summary> class Product { public string PartA { get; set; } public string PartB { get; set; } public string PartC { get; set; } } /// <summary> /// 构建着 & 抽象类 /// </summary> abstract class Builder { //创建产品对象 protected readonly Product product = new Product(); public abstract void BuildPartA(); public abstract void BuildPartB(); public abstract void BuildPartC(); /// <summary> /// 返回产品对象 /// </summary> /// <returns></returns> public Product GetResult() { return product; } } /// <summary> /// 具体构建者 /// </summary> class ConcreteBuilder1 : Builder { public override void BuildPartA() { product.PartA = "A1"; } public override void BuildPartB() { product.PartB = "B1"; } public override void BuildPartC() { product.PartC = "C1"; } } /// <summary> /// 指挥者 /// </summary> class Director { private Builder _builder; public Director(Builder builder) { _builder = builder; } public void SetBuilder(Builder builder) { _builder = builder; } /// <summary> /// 产品构建与组装方法 /// </summary> /// <returns></returns> public Product Construct() { _builder.BuildPartA(); _builder.BuildPartB(); _builder.BuildPartC(); return _builder.GetResult(); } } #endregion }

在指挥者类中可以注入一个抽象建造者类型的对象,它提供了一个建造者方法 Construct() ,在该方法中调用了 builder 对象的构造部件的方法,最后返回一个产品对象。

文章内容剩余60%,完整内容请点击下方链接查看:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved