设计模式之建造者模式

来源:互联网 发布:mac更新文件夹在哪里 编辑:程序博客网 时间:2024/06/05 08:27

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

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

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

建造者模式通常包括以下这几个角色:
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