建造器模式

2019-01-05  本文已影响6人  那年23

概念

  建造器模式,是一种使用多个简单对象构造成一个复杂对象的创建型模式。当然,我首先想到的就是Android 里面AlertDialog的创建。利用了AlertDialog.builder的方式,不过这里讲的建造器模式略微有些不同。

角色

抽象建造者:提供了一个创建产品Product的抽象方法以及build方法。
具体建造者:继承抽象建造者,并实现方法,以及提供一个生成Product的方法。
产品:具体的对象。
指挥者:用于创建的具体过程的管理。

let's look the code

  这里假设Human的生产为例。

产品
public class Human {
    private String heard;
    private String body;
    private String foot;

    public String getHeard() {
        return heard;
    }

    public void setHeard(String heard) {
        this.heard = heard;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getFoot() {
        return foot;
    }

    public void setFoot(String foot) {
        this.foot = foot;
    }

    @Override
    public String toString() {
        return "Human [heard=" + heard + ", body=" + body + ", foot=" + foot + "]";
    }

}
抽象建造者

  提供了一系列的创建方法。

public abstract class IBuilder {
    protected Human human = new Human();

    public abstract void createHeard();

    public abstract void createBody();

    public abstract void createFoot();

    public Human build() {
        return human;
    }
}
具体建造者

  boy:

public class BoyBuilder extends IBuilder {

    @Override
    public void createHeard() {
        human.setHeard("Boy's heard");
    }

    @Override
    public void createBody() {
        human.setBody("Boy's body");
    }

    @Override
    public void createFoot() {
        human.setFoot("Boy's foot");
    }

}

  girl:

public class GirlBuilder extends IBuilder {

    @Override
    public void createHeard() {
        human.setHeard("Girl's heard");
    }

    @Override
    public void createBody() {
        human.setBody("Girl's body");
    }

    @Override
    public void createFoot() {
        human.setFoot("Girl's foot");
    }

}
指挥者

  这里实现了步骤的管理,当然也可以结合策略模式,来提供不同的建造步骤。

public class Matrix {
    private IBuilder iBuilder;

    public Matrix(IBuilder iBuilder) {
        this.iBuilder = iBuilder;
    }

    public void setiBuilder(IBuilder iBuilder) {
        this.iBuilder = iBuilder;
    }

    public Human builder() {
        iBuilder.createHeard();
        iBuilder.createBody();
        iBuilder.createFoot();
        return iBuilder.build();
    }
}
客户端测试类
public class BuildClient {
    public static void main(String[] args) {
        Matrix matrix = new Matrix(new BoyBuilder());
        Human human = matrix.builder();
        System.out.println(human.toString());
    }
}
结果
总结一下

  上面例子我们也发现了建造器模式和抽象工厂模式的不同,建造器模式主要是管理建造步骤的。而且各个建造者是独立的。而这个建造器模式和AlertDialog的使用的不同点呢,其实也就是把具体单个Item的创建给暴露出来了。
优点:建造者独立,易扩展。

缺点:产品必须有共同点,限制了范围。

上一篇下一篇

猜你喜欢

热点阅读