设计模式之bulider------java

 Builder模式的缘起:
   
假设创建游戏中的一个房屋House设施,该房屋的构建由几部分组成,且各个部分富于变化。如果使用最直观的设计方法,每一个房屋部分的变化,都将导致房屋构建的重新修正…..
动机(Motivation):
   
在软件系统中,有时候面临一个复杂对象的创建工作,其通常由各个部分的子对象用一定算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合到一起的算法却相对稳定
   
如何应对种变化呢?如何提供一种封装机制来隔离出复杂对象的各个部分的变化,从而保持系统中的稳定构建算法不随需求的改变而改变?
意图(Intent)
   
将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
                                              ——-
《设计模式》GOF

适用性:
   
1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
    2.
当构造过程必须允许被构造的对象有不同的表示时。
实例代码:
import java.util.ArrayList;

interface Builder

{
 public void buildPartA();
 public void buildPartB();
 public void buildPartC();
 public Product getProduct();
}

class Product

{
 
     private ArrayList<String> parts=new ArrayList<String>();

    public void add(String part)

    {
          parts.add(part);
     }

    public void show()

   {
          System.out.println(“Product
有以下几部分构成
:”);
          for(String s:parts){
          System.out.println(s);

    }
}

class Worker implements Builder

{
    private Product product;
   
    public void buildPartA()

   {
        product=new Product();
        product.add(“A
部分
“);

   }

   public void buildPartB()

   {
         product.add(“B
部分
“);
  
    }

    public void buildPartC()

    {
         product.add(“C
部分
“);
  
     }
     public Product getProduct()

     {
          return product;
     }
}

class Designer

{
      public void order(Builder builder)

      {
             builder.buildPartA();
             builder.buildPartB();
             builder.buildPartC();
       }
}

 

public class Test

 {

 public static void main(String[] args)

{
              Designer designer=new Designer();
              Builder builder=new Worker();
              designer.order(builder);
              Product product =builder.getProduct();
              product.show();

 }
}

 


Builder模式的几个要点:

Builder模式 主要用于分步骤构建一个复杂的对象。在这其中分步骤是一个稳定的乘法,而复杂对象的各个部分则经常变化。

Builder模式主要在于应对复杂对象各个部分的频繁需求变动。缺点在于难以应对分步骤构建算法的需求变动。

Abstract Factory模式解决系列对象的需求变化,Builder模式解决对象部分的需求变化。Builder械通常和Composite模式组合使用。

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注