首页 > 代码库 > C#设计模式之建造者模式
C#设计模式之建造者模式
建造者模式可以将部件本身和它们的组装过程分开,关注如何一步步创建一个包含多个组成部分的复杂对象,用户只需要指定复杂对象的类型即可得到该对象,而无须知道其内部的具体构造细节。
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的定义:
将客户端与包含多个部件的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可;
关注如何逐步创建一个复杂的对象,不同的建造者定义了不同的创建过程;
建造者模式的结构:
建造者模式包含以下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();
C#设计模式之建造者模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。