建造者模式

  建造模式用于将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。等等,好像工厂模式的应用场景也是这样啊,那么他们到底有什么区别呢?

其实还是有一点区别的:工厂模式一般都是创建一个产品,注重的是把这个产品创建出来,而不关心这个产品的组成部分,从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品。同样,建造者模式也是创建一个产品,但是它不仅要把这个产品创造出来,还要关心这个产品的组成部分(主要区别),从代码上看,建造者模式在建造产品时,这个产品有很多方法,建造者模式会根据每个方法的差别建造出不同的产品。

  建造者模式应用场景:说来惭愧,在实际开发工作中,我还真没用过建造者模式,这个我会在后面补上。这篇博客主要是为了了解建造者模式的实现过程。

/**
 * created by xushilong on 2018/10/11.
 */
public class Shape {

    private int length;
    private int width;
    private int height;

    public int getLength() {
        return this.length;
    }

    public void setLength(int length) {
        this.length = length;
    }

    public int getWidth() {
        return this.width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return this.height;
    }

    public void setHeight(int height) {
        this.height = height;
    }
}
/**
 * created by xushilong on 2018/10/11.
 */
public interface Builder {

    void createLength();
    void createWidth();
    void createHeight();
    Shape createShape();
}
/**
 * created by xushilong on 2018/10/11.
 */
public class CircleBuilder implements Builder {

    Shape shape;

    public CircleBuilder() {
        shape=new Shape();
    }

    @Override
    public void createLength() {
        shape.setLength(0);
    }

    @Override
    public void createWidth() {
        shape.setWidth(5);
    }

    @Override
    public void createHeight() {
        shape.setHeight(0);
    }

    @Override
    public Shape createShape() {
        return shape;
    }
}
/**
 * created by xushilong on 2018/10/11.
 */
public class SquareBuiler implements Builder {

    Shape shape;

    public SquareBuiler() {
        shape=new Shape();
    }

    @Override
    public void createLength() {
        shape.setLength(5);
    }

    @Override
    public void createWidth() {
        shape.setWidth(5);
    }

    @Override
    public void createHeight() {
        shape.setHeight(0);
    }

    @Override
    public Shape createShape() {
        return shape;
    }
}
/**
 * created by xushilong on 2018/10/11.
 */
public class Director {

    public static Shape createShape(Builder builder) {
        builder.createLength();
        builder.createWidth();
        builder.createHeight();
        return builder.createShape();
    }
}

从代码可以看出,首先我们构建一个Shape类,他具有长,宽,高三种属性。然后新建一个Builder接口,他具有生成长,宽,高以及构建Shape类的方法,然后我们有两个构建者CircleBuilder和SquareBuilder,他们负责生成不同的Shape类,最后我们有一个导演者对象,从代码中可以看出,createShape()参数是Builder接口,而构建者都实现了这个接口,因此导演者对象可以根据不同的构建者来生成不同的Shape类。

posted @ 2018-10-11 18:16  徐世龙  阅读(104)  评论(0)    收藏  举报