建造者模式
建造模式用于将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。等等,好像工厂模式的应用场景也是这样啊,那么他们到底有什么区别呢?
其实还是有一点区别的:工厂模式一般都是创建一个产品,注重的是把这个产品创建出来,而不关心这个产品的组成部分,从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品。同样,建造者模式也是创建一个产品,但是它不仅要把这个产品创造出来,还要关心这个产品的组成部分(主要区别),从代码上看,建造者模式在建造产品时,这个产品有很多方法,建造者模式会根据每个方法的差别建造出不同的产品。
建造者模式应用场景:说来惭愧,在实际开发工作中,我还真没用过建造者模式,这个我会在后面补上。这篇博客主要是为了了解建造者模式的实现过程。
/** * 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类。

浙公网安备 33010602011771号