三、经典模式(3)建造者模式

建造者模式

建造者模式属于创建型模式,将部件本身和它们的组装过程分开,用户只需要指定复杂对象的类型即可得到该对象,而无需知道其内部的具体构造细节。
建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
建造者模式包含以下4个角色:
1.Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,一般声明两个方法,BuildPart X()用于创建复杂对象的各个部件,GetResult()方法用于返回复杂对象,Builder既可以是抽象类也可以是接口
2.ConcreteBuilder(具体建造者):实现Builder接口,实现各个部件的具体构造和装配方法,
3.Product(产品):它是被构建的复杂对象,包含多个组成部件。
4.Director(指挥者):负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其Construct()建造方法调用建造者对象的部件构造与装配方法,完成复杂对象的建造

废话少说,直接上代码,看代码直接学的快,所以请记住一定要上手,自己动手写代码
复杂对象是指包含多个成员变量的对象,这些成员对象也称为部件或零件。

典型的复杂对象类:
class Product
{
   private string partA;  //定义部件,部件可以是任意类型,包括值类型和引用类型
   private string partB;
   private string partC;
   
   public string PartA
   {
      get{return partA;}
      set{partA = value;}
   }
   public string PartB
   {
      get{return partB;}
      set{partB = value;}
   }
   public string PartC
   {
      get{return partC;}
      set{partC = value;}
   }
}

在抽象建造者类中定义了产品的创建方法和返回方法。

抽象建造者类
abstract class Builder
{
   protected Product product = new Product();  //创建产品对象
  
   public abstract void BuilderPartA();  //定义方法用于创建复杂对象各个部件
   public abstract void BuilderPartB();
   public abstract void BuilderPartC();

   public Prodcut GetResult()
   {
      return product;
   }
}

实现抽象建造类的接口具体实现。

具体建造者类:
class ConcreteBuilder1:Builder
{
  public override void BuilderPartA()
  {
     product.PartA = "A1";
  }
   public override void BuilderPartB()
  {
     product.PartB = "B1";
  }
   public override void BuilderPartC()
  {
     product.PartC = "C1";
  }
}

Director类,一来隔离了客户端与创建过程,二来控制了产品对象的创建过程,包括是否调用方法,以及它们的调用的先后次序,还提供了一个建造方法Construct(),调用了builder对象的构造部件的方法,最后返回一个产品对象。

指挥者类:
class Director
{
  private Builder builder;
 
  public Director(Builder builder)
  {
     this.builder = builder;
  }
  public void SetBuilder(Builder builder)
  {
    this.builder = builder;
  }
  public Product Construct()  //产品构建与组装方法
  {
     builder.BuilderPartA();
     builder.BuilderPartB();
     builder.BuilderPartC();
     return builder.GetResult();
  }
}

对于客户端而讲,只需要关心具体建造者的类型,而须关心产品对象的具体组装过程。

客户端实现:
...
Builder builder = new ConcreteBuilder1();   
Director dierctor = new Director(builder);
Product product = dirctor.Construct();
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值