.Net创建型设计模式之建造者、生成器模式(Builder)
生成器模式(Builder)是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离。通过使用生成器模式,可以逐步构建一个复杂对象,而不需要直接调用其构造函数或公共接口。
优点
- 将对象的构建过程与其表示分离,使得构建过程更加灵活和可控。
- 可以通过不同的生成器组合来构建不同的对象,提高代码的复用性和可扩展性。
- 隐藏了对象的构建细节,使得客户端代码更加简洁和易于理解。
结构
生成器模式包含以下几个关键角色:
- 产品(Product):表示被构建的复杂对象。
- 抽象生成器(Abstract Builder):定义了构建产品的抽象接口,包括构建各个部分的方法。
- 具体生成器(Concrete Builder):实现了抽象生成器接口,负责构建产品的各个部分,并提供获取最终产品的方法。
- 指导者(Director):负责使用生成器来构建产品,它并不知道具体的构建细节,只负责调用生成器的方法来构建产品。
示例说明1:构建汽车对象
// 产品类:汽车
public class Car
{
public string Brand { get; set; }
public string Model { get; set; }
public int Year { get; set; }
public string Color { get; set; }
// 其他属性和方法...
}
// 抽象生成器类
public abstract class CarBuilder
{
protected Car car;
public void CreateCar()
{
car = new Car();
}
public abstract void SetBrand();
public abstract void SetModel();
public abstract void SetYear();
public abstract void SetColor();
public Car GetCar()
{
return car;
}
}
// 具体生成器类:奔驰汽车生成器
public class BenzCarBuilder : CarBuilder
{
public override void SetBrand()
{
car.Brand = \"Benz\";
}
public override void SetModel()
{
car.Model = \"C-Class\";
}
public override void SetYear()
{
car.Year = 2022;
}
public override void SetColor()
{
car.Color = \"Black\";
}
}
// 指导者类
public class CarDirector
{
private CarBuilder carBuilder;
public CarDirector(CarBuilder builder)
{
carBuilder = builder;
}
public void ConstructCar()
{
carBuilder.CreateCar();
carBuilder.SetBrand();
carBuilder.SetModel();
carBuilder.SetYear();
carBuilder.SetColor();
}
}
// 客户端代码
CarBuilder builder = new BenzCarBuilder();
CarDirector director = new CarDirector(builder);
director.ConstructCar();
Car car = builder.GetCar();
在上述示例中,我们通过生成器模式逐步构建了一个汽车对象。抽象生成器定义了构建汽车的抽象接口,具体生成器实现了抽象生成器接口,并负责构建具体的汽车对象。指导者类使用生成器来构建汽车对象,客户端代码通过指导者来获取最终构建好的汽车对象。
示例说明2:构建电脑对象
```csharp
// 产品类:电脑
public class Computer
{
public string Brand { get; set; }
public string Model { get; set; }
public string CPU { get; set; }
public int RAM { get; set; }
// 其他属性和方法...
}
// 抽象生成器类
public abstract class ComputerBuilder
{
protected Computer computer;
public void CreateComputer()
{
computer = new Computer();
}
public abstract void SetBrand();
public abstract void SetModel();
public abstract void SetCPU();
public abstract void SetRAM();
public Computer GetComputer()
{
return computer;
}
}
// 具体生成器类:戴尔电脑
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net创建型设计模式之建造者、生成器模式(Builder) - Python技术站