建造者模式详解

建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种创建复杂对象的最佳方式。这种模式能够让分步骤创建复杂对象,并允许只通过必要的步骤来构建对象。建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

建造者模式的应用场景

建造者模式通常在以下情况下使用:

  • 当需要创建一个复杂对象时,且其构建过程需要独立于其表示时。
  • 当对象的构建过程需要分步骤进行,且这些步骤可以有不同的顺序时。
  • 当需要通过不同的表示来构建一个复杂的对象时。

建造者模式的UML图

要查看建造者模式的UML图,请访问dofactory网站。

C#示例

让通过一个C#示例来理解建造者模式。

Director类负责协调构建过程。

public class Director { public void Construct(HouseBuilder houseBuilder) { houseBuilder.BuildFloor(); houseBuilder.BuildWalls(); houseBuilder.BuildDoors(); houseBuilder.BuildWindows(); } }

HouseBuilder是一个抽象类,定义了构建房屋的接口。

public abstract class HouseBuilder { protected House _house; public House House { get { return _house; } } public abstract void BuildDoors(); public abstract void BuildWindows(); public abstract void BuildWalls(); public abstract void BuildFloor(); }

HousePart类表示房屋的一部分,House类表示整个房屋。

public class HousePart { private string _strPartName; public string PartName { get { return _strPartName; } } public HousePart(string name) { _strPartName = name; } } public class House { private string _material; private List _houseParts; public string Material { get { return _material; } } public House(string material) { _material = material; _houseParts = new List(); } public void AddPart(HousePart part) { _houseParts.Add(part); } } public class GlassHouseBuilder : HouseBuilder { public override void BuildFloor() { _house = new House("glass"); House.AddPart(new HousePart("stone floor")); } public override void BuildWalls() { House.AddPart(new HousePart(House.Material + " walls")); } public override void BuildDoors() { House.AddPart(new HousePart("wood doors")); } public override void BuildWindows() { House.AddPart(new HousePart(House.Material + " windows")); } } public class WoodHouseBuilder : HouseBuilder { public override void BuildFloor() { _house = new House("wood"); House.AddPart(new HousePart(House.Material + " floor")); } public override void BuildWalls() { House.AddPart(new HousePart(House.Material + " walls")); } public override void BuildDoors() { House.AddPart(new HousePart("iron doors")); } public override void BuildWindows() { House.AddPart(new HousePart("glass windows")); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485