设计模式-建造者模式

    本篇文章主要介绍建造者模式。

    建造者模式:讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    我们先看下结构图:

    Builder是创建Product对象的抽象接口;ConcreteBuilder是具体建造者,实现Builder接口;Producr是具体的产品;Director是指挥者,是构建一个使用Builder接口的对象。

    下面我们看下基本代码实现。

package com.lwx.builder;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lwx
 * Date: 2019-03-31
 * Time: 20:38
 */
public class Product {

    private String name;
    private String type;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "Product{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                '}';
    }

}
package com.lwx.builder;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lwx
 * Date: 2019-03-31
 * Time: 20:42
 */
public interface Builder {

    void setPart(String name, String type);

    Product createProduce();

}
package com.lwx.builder;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lwx
 * Date: 2019-03-31
 * Time: 20:45
 */
public class ConcreteBuilder implements Builder {

    private Product product = new Product();

    public void setPart(String name, String type) {
        product.setName(name);
        product.setType(type);
    }

    public Product createProduce() {
        return this.product;
    }

}
package com.lwx.builder;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lwx
 * Date: 2019-03-31
 * Time: 20:47
 */
public class Director {

    private Builder builder = new ConcreteBuilder();

    public Product buildAProduct() {
        builder.setPart("法拉利", "911");
        return builder.createProduce();
    }

    public Product buildBProduct(){
        builder.setPart("宝马汽车", "730");
        return builder.createProduce();
    }

}

    代码很简单就不多做解释,下面看下测试类和运行结果。

package com.lwx.builder;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lwx
 * Date: 2019-03-31
 * Time: 20:55
 */
public class BuildTest {

    public static void main(String[] args) {
        Director director = new Director();
        Product aProduct = director.buildAProduct();
        System.out.println(aProduct.toString());

        Product bProduct = director.buildBProduct();
        System.out.println(bProduct.toString());

    }

}

    我们可以看到,建造者模式与工厂模式是极为相似的,总体上,建造者模式仅仅只比工厂模式多了一个“导演类”的角色。在建造者模式的类图中,假如把这个导演类看做是最终调用的客户端,那么图中剩余的部分就可以看作是一个简单工厂模式了。

    与工厂模式相比,建造者模式一般用来创建更为复杂的对象,因为对象的创建过程更复杂,因此将对象的创建过程独立出来组成一个新的类——导演类。也就是说,工厂模式是将对象的全部创建过程封装在工厂类中,由工厂类向客户端提供最终的产品;而建造者模式中,建造者类一般只提供产品类中各个组件的建造,而将具体建造过程交付给导演类。由导演类负责将各个组件按照特点的规则组件为产品,然后将组建好的产品交付给客户端。

  

    建造者模式的优点:

      建造者模式使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要在定义一个具体的建造者就好了。

      

 

    最后附上demo的githup地址:https://github.com/yijinqincai/design_patterns

posted @ 2019-03-31 21:56  leisurexi  阅读(114)  评论(0编辑  收藏  举报