建造者模式是一种对象创建型模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它适用于构建复杂对象的场景,可以很好地解决“不同的对象需要复杂的组装过程”的问题。通过建造者模式,我们可以将对象的创建和表示分离,使得程序的扩展性和可维护性都得到了提高。
下面是一个使用C#编写的建造者模式实例,该实例演示了如何使用建造者模式创建一辆汽车:
// 汽车类,表示我们要构建的复杂对象
class Car
{
private string engine;
private string body;
private string wheel;
private string other;
public void SetEngine(string e) { engine = e; }
public void SetBody(string b) { body = b; }
public void SetWheel(string w) { wheel = w; }
public void SetOther(string o) { other = o; }
public void Show()
{
Console.WriteLine("引擎部分:" + engine);
Console.WriteLine("车身部分:" + body);
Console.WriteLine("车轮部分:" + wheel);
Console.WriteLine("其他部分:" + other);
}
}
// 抽象建造者类,声明了设置产品各部分的方法,以及返回产品的方法
abstract class CarBuilder
{
public abstract void BuildEngine();
public abstract void BuildBody();
public abstract void BuildWheel();
public abstract void BuildOther();
public abstract Car GetCar();
}
// 具体建造者类,实现了抽象建造者的方法,以构建和装配各个部件
class JeepBuilder : CarBuilder
{
private Car car = new Car();
public override void BuildEngine() { car.SetEngine("Jeep 引擎"); }
public override void BuildBody() { car.SetBody("Jeep 车身"); }
public override void BuildWheel() { car.SetWheel("Jeep 车轮"); }
public override void BuildOther() { car.SetOther("Jeep 其他部分"); }
public override Car GetCar() { return car; }
}
// 具体建造者类,实现了抽象建造者的方法,以构建和装配各个部件
class BMWBuilder : CarBuilder
{
private Car car = new Car();
public override void BuildEngine() { car.SetEngine("BMW 引擎"); }
public override void BuildBody() { car.SetBody("BMW 车身"); }
public override void BuildWheel() { car.SetWheel("BMW 车轮"); }
public override void BuildOther() { car.SetOther("BMW 其他部分"); }
public override Car GetCar() { return car; }
}
// 导演类,负责调用建造者以构造产品
class Director
{
public void Construct(CarBuilder builder)
{
builder.BuildEngine();
builder.BuildBody();
builder.BuildWheel();
builder.BuildOther();
}
}
// 客户端代码
class Client
{
static void Main(string[] args)
{
Director director = new Director();
CarBuilder builder = new JeepBuilder();
director.Construct(builder);
Car car = builder.GetCar();
car.Show();
builder = new BMWBuilder();
director.Construct(builder);
car = builder.GetCar();
car.Show();
Console.Read();
}
}
以上代码运行结果如下:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。