🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。 🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏
设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。
毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。每种设计模式都有相应的原理和最佳实践,它们描述了我们日常开发中不断遇到的问题,以及这些问题的核心解决方法。正是因为这种实用性和通用性,设计模式才能在软件开发中广泛地得以应用。设计模式是构建稳健、可扩展和可维护软件的关键工具,为开发者们提供了解决问题的智慧和指导。
建造者模式是一种创建型设计模式,其主要目的是将复杂对象的构建过程与其最终表示分离开来。这意味着通过建造者模式,可以使用相同的构建过程来创建不同的对象表示。
这种模式的核心思想是将构建复杂对象的过程分解成多个简单的步骤,每个步骤由一个具体的建造者对象负责完成。通过将这些步骤按顺序组合起来,最终可以创建出一个完整的复杂对象。
建造者模式的优点在于它提供了一种灵活的方式来构建不同配置的对象,同时将对象的构建与其表示解耦,使得系统更加可维护和可扩展。这种模式常常在需要创建复杂对象,且对象的构建过程涉及多个步骤或配置
在建造者模式(Builder Pattern)中,抽象建造者(Builder)是一个关键的概念,它的作用是定义了构建复杂对象的抽象接口和步骤,同时负责规定对象的构建过程。
抽象建造者的主要作用如下:
抽象建造者在建造者模式中充当了重要的角色,它定义了对象的构建过程和接口,使得客户端能够通过建造者来创建复杂对象,同时实现了对象的构建与表示的分离,提高了系统的可维护性和灵活性。不同的具体建造者可以根据需要创建不同的产品表示
建造者模式(Builder Pattern)中的具体建造者(Concrete Builder)是实现抽象建造者接口的具体类,它的作用是负责实际构建复杂对象的各个部分,并最终组装成完整的产品。以下是具体建造者的概念和作用:
具体建造者是建造者模式中的关键组件,它根据抽象建造者接口的定义来实际构建和组装复杂对象的各个部分,从而创建出最终的产品。不同的具体建造者可以用于创建不同类型的对象,提高了系统的可扩展性和灵活性。同时,具体建造者与指挥者协同工作,确保构建过程按照一定的顺序进行。
建造者模式(Builder Pattern)中的指导者(Director)是一个协调者,它的作用是负责按照一定的顺序来调用具体建造者(Concrete Builder)的方法,从而协调构建复杂对象的过程,最终创建一个完整的产品。以下是指导者的概念和作用:
指导者在建造者模式中充当了协调者的角色,它定义了构建复杂对象的顺序和流程,封装了构建细节,提供了高层次的接口供客户端使用。通过指导者,客户端可以轻松地创建复杂对象,同时保持了对象构建过程的灵活性和可维护性。指导者与具体建造者协同工作,确保复杂对象的正确构建。
在建造者模式(Builder Pattern)中,产品类(Product)代表要构建的复杂对象,它的作用是承载和存储具体建造者(Concrete Builder)所创建的各个部分,并最终组装成完整的对象。以下是产品类的概念和作用:
产品类在建造者模式中扮演着重要的角色,它是复杂对象的容器,用于存储和表达各个部分或属性。产品类的设计要根据具体的需求和复杂对象的特性来确定,它负责承载构建过程中的信息,并在最终构建完成后提供给客户端。这有助于实现对象的构建与表示的分离,提高了系统的可维护性和灵活性。
命名空间BuilderPattern中包含Vehicle机动车类充当产品类,Builder基类为抽象建造者,东风悦达Yuedakia类、大众汽车Volkswagen类、特斯拉Tesla类。另外包含1个机动车扩展类和1个指导者。本示例向大家演示3个不同的汽车厂商在生产比较复杂的汽车时所采用的策略。
public abstract class Builder {
protected Vehicle _product = new Vehicle();
public abstract void BuildCarframe();
public abstract void BuildWheel();
public abstract void BuildDoor();
public abstract void BuildApparatus();
public abstract void BuildColor();
public virtual Vehicle GetResult() {
return _product;
}
}
建造者基类Builder,定义生产不同汽车部位的接口并在内部维持对机动车的引用。
public class Tesla : Builder {
public override void BuildCarframe() {
_product.Carframe = "ZZ32093M3485C1356";
}
public override void BuildWheel() {
_product.Wheel = 4;
}
public override void BuildDoor() {
_product.Door = 5;
}
public override void BuildApparatus() {
_product.Apparatus = "Model X";
}
public override void BuildColor() {
_product.Color = Color.Red;
}
}
具体建造者特斯拉Tesla类,实现抽象建造者Builder的接口。
public class Volkswagen : Builder {
public override void BuildCarframe() {
_product.Carframe = "VS89362P1903C9852";
}
public override void BuildWheel() {
_product.Wheel = 4;
}
public override void BuildDoor() {
_product.Door = 4;
}
public override void BuildApparatus() {
_product.Apparatus = "Skoda";
}
public override void BuildColor() {
_product.Color = Color.Blue;
}
}
具体建造者大众汽车Volkswagen类,实现抽象建造者Builder的接口。
public class Yuedakia : Builder {
public override void BuildCarframe() {
_product.Carframe = "YK9391J0231L30D32";
}
public override void BuildWheel() {
_product.Wheel = 4;
}
public override void BuildDoor() {
_product.Door = 4;
}
public override void BuildApparatus() {
_product.Apparatus = "Kia K3";
}
public override void BuildColor() {
_product.Color = Color.Wheat;
}
}
具体建造者东风悦达Yuedakia类,实现抽象建造者Builder的接口。
public class Vehicle {
public string Carframe { get; set; }
public int Wheel { get; set; }
public int Door { get; set; }
public string Apparatus { get; set; }
public Color Color { get; set; }
public void Print() {
Console.WriteLine($"{this.VehicleInfo()}");
}
}
机动车Vehicle类,这是我们通过建造者模式所要创建的复杂对象。
public class Director {
public void Construct(Builder builder) {
builder.BuildCarframe();
builder.BuildWheel();
builder.BuildDoor();
builder.BuildApparatus();
builder.BuildColor();
}
}
这是指导类Director,它负责对象的创建过程。
public static class Extentions {
public static string VehicleInfo(this Vehicle vehicle) {
var type = vehicle.GetType();
var properties = type.GetProperties();
var result = string.Empty;
foreach (var prop in properties) {
result +=
$"{prop.Name}:{prop.GetValue(vehicle, null)}{Environment.NewLine}";
}
return result;
}
}
一个扩展类,方便演示过程中打印出相关信息。
public class Program {
private static Director _director = null;
private static List<Builder> _builders = null;
private static Vehicle _vehicle = null;
public static void Main(string[] args) {
_director = new Director();
_vehicle = new Vehicle();
_builders = new List<Builder>() {
new Tesla(),
new Volkswagen(),
new Yuedakia()
};
foreach (var builder in _builders) {
_director.Construct(builder);
_vehicle = builder.GetResult();
_vehicle.Print();
}
Console.ReadKey();
}
}
以上是调用方的代码,分别维持对指导者、建造者和机动车的引用,接下来我们创建了3辆汽车,特斯拉的Model X、大众汽车的Skoda和东风悦达的Kia K3。以下是这个案例的输出结果:
Carframe:ZZ32093M3485C1356
Wheel:4
Door:5
Apparatus:Model X
Color:Color [Red]
Carframe:VS89362P1903C9852
Wheel:4
Door:4
Apparatus:Skoda
Color:Color [Blue]
Carframe:YK9391J0231L30D32
Wheel:4
Door:4
Apparatus:Kia K3
Color:Color [Wheat]
<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
建造者模式(Builder Pattern)是一种常用的设计模式,它具有许多优点,包括:
建造者模式在构建复杂对象时提供了一种优雅的解决方案,它将构建过程模块化,降低了代码的复杂性,提高了代码的可维护性和可扩展性,同时使客户端更容易使用和理解对象的构建过程。这些优点使建造者模式在软件开发中广泛应用。
尽管建造者模式(Builder Pattern)具有许多优点,但也存在一些缺点,需要在使用时考虑:
建造者模式适用于构建复杂对象的情况,但在简单情况下可能会显得过于繁琐。在选择是否使用建造者模式时,需要权衡其优点和缺点,并根据具体需求和项目的复杂性来做出决策。
建造者模式(Builder Pattern)适用于以下情景:
建造者模式适用于构建复杂对象,需要灵活支持不同配置或需要隐藏构建细节的情况。它有助于降低代码的耦合度,提高可读性和可维护性,特别适用于大型项目或需要创建多种不同类型对象的应用中。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。