java设计模式学习4--Builder Pattern[原创]

  今天看了看建造模式,就上来写点心得体会。
  先套用一段理论:建造模式是将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
  怎么理解呢?
  一个大的系统,我们该怎样设计?我想,对于一个好的设计来说,应该是尽量不用具体的东西来定义,正如我上篇文章最后说的,定义类型尽量用抽象的,记住,在java里,抽象是最高境界,一切具体的东西都是由抽象的实例化而来,抽象的东西可以存在,实际的东西必然也可以。我们要设计的,是一个抽象的结构,抽象的结构里的每部分,也是抽象的。对于抽象的部分,可以有不同的实现,从而整个系统可以有不同的实现。
  说到这里,我想起了抽象工厂模式,这里2者之间怎么这么的相似??好,接下来就说,为什么它就要叫建造模式。
  在抽象工厂模式里,由抽象工厂到具体工厂再到具体的一系列产品,用户是与工厂联系得到产品,而在建造模式里,由一个抽象的建造者引申到多个具体的建造者,具体的建造者再到产品,这里是一样的,但是,在建造模式里,还有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。再看看那套理论的最后一句,“建造模式可以强制实行一种分步骤进行的建造过程”,明白了没?建造模式“可以”强制实行一种分步骤进行的建造过程,注意是可以,不是必须的。看到这里,明白抽象工厂模式和建造模式的区别没?
  下面,摘抄网上一个实现了分步骤进行的建造过程:
  public interface Builder {
  
    void buildPartA();
    void buildPartB();
    void buildPartC();
  
    Product getResult();
  }

  public class Director {
  
    private Builder builder;
  
    public Director( Builder builder ) {
      this.builder = builder;
    }
    public void construct() {
      builder.buildPartA();
      builder.buildPartB();
      builder.buildPartC();
    }
  }

  public class ConcreteBuilder implements Builder {
  
    Part partA, partB, partC;
    public void buildPartA() {
      //这里是具体如何构建partA的代码
  
    };
    public void buildPartB() {
      //这里是具体如何构建partB的代码
    };
     public void buildPartC() {
      //这里是具体如何构建partB的代码
    };
     public Product getResult() {
      //返回最后组装成品结果
    };
  
  }

  public interface Product { }
  public interface Part { }
  下面是调用builder的方法:
  ConcreteBuilder builder = new ConcreteBuilder();
  Director director = new Director( builder );
  
  director.construct();
  Product product = builder.getResult();

  建造模式就讲到这里。
  
原文地址:https://www.cnblogs.com/zxub/p/177473.html