软件开发的家园,编程爱好者的天地.

现在是:北京时间 2016/4/14 上午11:50:51 星期四

设为首页  |  加入收藏  |  网站地图

当前位置: 第八基地首页 > java > j2ee >
设计模式之建造者模式(java版)
发布于:第八基地 来源:互联网 作者:天堂路上 时间:2017-10-16 点击:237

需求:
汽车制造,包扩车轮,发动机,方向盘,车灯,其他

这里,我们需要流程化的搞这些制造,但是由于所有汽车制造都需要这些流程,为了保证这些流程的挣钱性,咋办呢?

这里就需要用到我们得建造者模式

建造者模式通常包括以下这几个角色:
1、Builder:给出一个抽象接口,规范建造者对于生产的产品的各个组成部分的建造。这个接口只是定一个规范,不涉及具体的建造,具体的建造让继承于它的子类(ConcreteBuilder)去实现。
2、ConcreteBuilder:实现builder接口,针对不同的商业逻辑,具体化各对象部分的建造,最后返回一个建造好的产品。
3、Director:导演,顾名思义,负责规范流程之用。在指导中不涉及产品的创建,只负责保证复杂对象各部分被创建或按某种顺序创建。
4、Product:复杂对象。

建造者模式的UML图:
这里写图片描述

实现:

Product:

public class Car {
    private String chelun;
    private String fadongji;
    private String fangxiangpan;
    private String chedeng;
    private String qita;

    public String getChelun() {
        return chelun;
    }

    public void setChelun(String chelun) {
        this.chelun = chelun;
    }

    public String getFadongji() {
        return fadongji;
    }

    public void setFadongji(String fadongji) {
        this.fadongji = fadongji;
    }

    public String getFangxiangpan() {
        return fangxiangpan;
    }

    public void setFangxiangpan(String fangxiangpan) {
        this.fangxiangpan = fangxiangpan;
    }

    public String getChedeng() {
        return chedeng;
    }

    public void setChedeng(String chedeng) {
        this.chedeng = chedeng;
    }

    public String getQita() {
        return qita;
    }

    public void setQita(String qita) {
        this.qita = qita;
    }
}

然后建造者抽象类:

abstract class Builder {

    public abstract void buildChelun();

    public abstract void buildFadongji();

    public abstract void buildFangxiangpan();

    public abstract void buildChedeng();

    public abstract void buildQita();
}

然后是具体建造者:

public class CarBuilder extends Builder {
    public void buildChelun() {
        System.out.println("第一步,建车轮");
    }

    public void buildFadongji() {
        System.out.println("第二步,建发动机");
    }

    public void buildFangxiangpan() {
        System.out.println("第三步,建方向盘");
    }

    public void buildChedeng() {
        System.out.println("第四步,建车灯");
    }

    public void buildQita() {
        System.out.println("第五步,建其他的东西");
    }
}

最后是导演:

public class CarDirector {

    private Builder builder;

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

    public void construct(){
        builder.buildChelun();
        builder.buildFadongji();
        builder.buildFangxiangpan();
        builder.buildChedeng();
        builder.buildQita();
    }
}

测试:

public class testbuild {
    public static void main(String[] args) {
        CarBuilder c = new CarBuilder();
        CarDirector cd = new CarDirector(c);
        cd.construct();
    }
}

输出:
第一步,建车轮
第二步,建发动机
第三步,建方向盘
第四步,建车灯
第五步,建其他的东西

现在需要再搞个大巴的制造,该肿么办呢?哈哈。。。

建造者模式优点:

1、将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,使得我们能够更加精确的控制复杂对象的产生过程。

      2、将产品的创建过程与产品本身分离开来,可以使用相同的创建过程来得到不同的产品。也就说细节依赖抽象。

      3、每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,
      用户使用不同的具体建造者即可得到不同的产品对象。

缺点:

因此其使用范围受到一定的限制。

2、如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

应用场景:

1、需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。 
2、隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
下一篇:没有了
对我有帮助
(0)
0%
对我没帮助
(0)
0%
返回顶部
在线反馈
在线反馈