建造者模式可以将部件本身和它们的组装过程分开,关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而无须知道其内部的具体构造细节。
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的定义:
将客户端与包含多个部件的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可;
关注如何逐步创建一个复杂的对象,不同的建造者定义了不同的创建过程;
建造者模式的结构:
建造者模式包含以下4个角色:
Builder(抽象建造者)
ConcreteBuilder(具体建造者)
Product(产品)
Director(指挥者)
例子:
/// <summary> /// 抽象建造者 /// </summary> public abstract class Builder { public abstract void BuilderPartA(); public abstract void BuilderPartB(); public abstract void BuilderPartC(); /// <summary> /// //创建产品对象 /// </summary> protected Product product = new Product(); /// <summary> /// 返回产品对象 /// </summary> /// <returns></returns> public Product GetResult() { return product; } }
/// <summary> /// 产品类 /// </summary> public class Product { //生产的产品 public string PartA { get; set; } public string PartB { get; set; } public string PartC { get; set; } }
/// <summary> /// 具体建造者 /// </summary> public class ConcreteBuilder:Builder { /// <summary> /// 产品A /// </summary> public override void BuilderPartA() { product.PartA = "A1"; Console.WriteLine("生产了A1产品"); } /// <summary> /// 产品B /// </summary> public override void BuilderPartB() { product.PartB = "B1"; Console.WriteLine("生产了B1产品"); } /// <summary> /// 产品C /// </summary> public override void BuilderPartC() { product.PartC = "C1"; Console.WriteLine("生产了C1产品"); } }
/// <summary> /// 指挥者 /// </summary> public class Director { private Builder _builder; public Director(Builder builder) { this._builder = builder; } public void SetBuilder(Builder builder) { this._builder = builder; } /// <summary> /// 产品构建与组装方法 /// </summary> /// <returns></returns> public Product Construct() { _builder.BuilderPartA(); _builder.BuilderPartB(); _builder.BuilderPartC(); return _builder.GetResult(); } }
//客户端调用 Builder builder = new ConcreteBuilder(); Director director = new Director(builder); Product product = director.Construct();
时间: 2024-10-07 23:53:51