设计模式之创建者模式

1.什么是创建者模式(构建者模式)?

         创建者模式类似于一个步骤基本固定,但是每个步骤中的具体形式却又可以变化的这类对象的创建。其中,创建者负责构建一个对象的各个部分,并且完成组装的过程。如,做饭过程


2.意图是什么?

         将类的构建逻辑转移到类的实例化外部。

3.创建者模式解读

 1)类图

image_2

 2)角色分析

   Product:所需要创建的对象类,由具体环境确定;

   IBuild:创建工具接口/抽象类,包括对象组装所需的所有步骤的接口声明;

   Build:创建工具具体实现类;Product对象作为其成员;

   Directr:引导者,来引导对象的具体组装过程;而具体对象的创建还是靠对象本身提供的相应方法,Builder只是调用对象的方法完成组装步骤;

   Client:最终使用者。

4.创建者模式举例

 1)定义产品类

class Product {
   List <string> parts = new List <string> ();
   public void Add(string part) {
     parts.Add(part);
   }
 
   public void Display() {
     Console.WriteLine("\nProduct Parts -------");
     foreach (string part in parts)
       Console.Write(part);
     Console.WriteLine();
   }
 }

 2)定义创建工具接口

interface IBuilder {
   void BuildPartA();
   void BuildPartB();
   Product GetResult();
 }
 

 3)定义创建工具具体实现类

 class Builder1 : IBuilder {
   private Product product = new Product();
   public  void BuildPartA() {
     product.Add("PartA ");
   }
 
   public void BuildPartB() {
     product.Add("PartB ");
   }
 
   public Product GetResult() {
     return product;
   }
 }
 
 class Builder2 : IBuilder {
   private Product product = new Product();
   public void BuildPartA() {
     product.Add("PartX ");
   }
 
   public void BuildPartB() {
     product.Add("PartY ");
   }
 
   public Product GetResult() {
     return product;
   }
 }

 4)定义引导者类

class Director {
   // Builder uses a complex series of steps
   public void Construct(IBuilder builder) {
     builder.BuildPartA();
     builder.BuildPartB();
     builder.BuildPartB();
   }
 }

 5)定义消费者类

public static void Main() { 
   // Create one director and two builders
   Director director = new Director();
 
   IBuilder b1 = new Builder1();
   IBuilder b2 = new Builder2();
 
   // Construct two products
   director.Construct(b1);
   Product p1 = b1.GetResult();
   p1.Display();
 
   director.Construct(b2);
   Product p2 = b2.GetResult();
   p2.Display();
   Console.ReadKey();
 }


5.使用场合
  1)构建者构建类对象的过程通常是分步骤的,这使得该模式通常被应用于解析文本以创建对象的场景。

  2)具有依赖关系或者组合关系的对象的创建尤为适合。

  3)通常用在在构建解释器和用户界面上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值