Java设计模式--构建者模式(Builder)

构造性模式:

  • 一般情况下iain,需要为自己开发的类提供构造函数使其能够被初始化。这些构造函数相互协作,并且类种的每个构造函数最终都会去带调用超类的构造函数。
  • 调用构造函数的方式有两种:
    • 使用new操作符
    • 使用发射来初始化和使用对象

构造者模式

创建一个对象时,并不一定拥有创建该对象的全部信息.而是需要逐步的获得创建对象的信息,更方便的做法就时分步骤构建对象。

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

引入构造者模式,就可以提供一个中间对象来存储数据,直到准备好所有数据后,再根据中间对象的数据来构建目标对象。

小结:

  • 构建者关注目标类的构建过程,目标类关注合法实例的业务本身。好处时在实例化目标类前,确保得到的是一个有效的对象,并且不会让构建逻辑出现在目标类本身。
  • 构造者构建类对象的过程通常是分步骤的,这使得该模式通常被应用于解析文本以创建对象的场景。

代码如下:


package website.dengta.builder;

/**
 * @author www.dengta.website
 * @date 2017-11-06 23:25
 */
public class Product {
    public Product() {
        System.out.println("product is init");
    }
}

package website.dengta.builder;

public abstract class Builder {
    Product product = new Product();

    public abstract void builderPartA();
    public abstract void builderPartB();
    public abstract void builderPartC();

    public abstract Product getResult();
}

package website.dengta.builder;

/**
 * @author www.dengta.website
 * @date 2017-11-06 23:25
 */
public class ConcreteBuilder extends Builder {

    private Product product = new Product();

    @Override
    public void builderPartA() {
        System.out.println("组装A");
    }

    @Override
    public void builderPartB() {
        System.out.println("组装B");
    }

    @Override
    public void builderPartC() {
        System.out.println("组装C");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

package website.dengta.builder;

/**
 * @author www.dengta.website
 * @date 2017-11-06 23:33
 */
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void construct(){
        builder = new ConcreteBuilder();
        builder.builderPartA();
        builder.builderPartB();
        builder.builderPartC();
        builder.getResult();
    }
}

package website.dengta.builder;

/**
 * @author www.dengta.website
 * @date 2017-11-06 23:35
 */
public class TestCient {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);

        director.construct();
    }

}

猜你喜欢

转载自blog.csdn.net/huanghailiang_ws/article/details/78463355