设计模式—建造者模式

来源:互联网 发布:联通系统集成.知乎 编辑:程序博客网 时间:2024/06/05 13:22

建造者模式把工人(对象组件的建造者ComputerCreator)给主管(Director),让主管告诉工人如何一步一步创建产品。

      各司其职,主管知道该怎么创建对象,但是不会创建具体的对象模块。工人会创建具体的模块但是不知道给怎样一步一步创建。两者组合创建出需要的对象。

  优势:把复杂对象的各个模块的具体创建和各个模块的组合分隔开,封装创建过程,避免在创建过程出错。

     可以方便扩展同一类型的对象,只需添加一个Creator即可。

示例说明:用IBM和Lenovo的员工创建出各自的电脑。

类图如下:

 

看代码:

ComputerCreator:定义所有的员工技能

复制代码
package com.zpj.designMode.builderpattern;public interface ComputerCreator {    public void createCPU();    public void createMainboard();    public void createHardDisk();    public void createDisplay();}
复制代码

 

IBMCreator 具体员工的实现

复制代码
package com.zpj.designMode.builderpattern;public class IBMCreator implements ComputerCreator {//按照IBM的组件型号创建各个组件    @Override    public void createCPU() {    }    @Override    public void createMainboard() {    }    @Override    public void createHardDisk() {    }    @Override    public void createDisplay() {    }}
复制代码

 

LenovoCreator 具体员工的实现

复制代码
package com.zpj.designMode.builderpattern;public class LenovoCreator implements ComputerCreator {//按照Lenovo的组件型号创建各个组件    @Override    public void createCPU() {    }    @Override    public void createMainboard() {    }    @Override    public void createHardDisk() {    }    @Override    public void createDisplay() {    }}
复制代码

 

只有Director 才知道电脑创建流程,你给他工人,他来告诉工人怎么创建。

复制代码
package com.zpj.designMode.builderpattern;public class Director {    private ComputerCreator creator;    public Director(ComputerCreator creator) {        super();        this.creator = creator;    }    //只有Director才知道该如何建造电脑,执行创建顺序是什么,都需要那些步骤。    //creator是不知道的,员工只会制作一个个组件,但是不知道创建一个电脑需要哪些组件以及创建顺序    //所有电脑的制造流程是一样的,不一样的是电脑的各个组件型号不同    public void createComputer() {        creator.createCPU();        creator.createDisplay();        creator.createHardDisk();        creator.createMainboard();    }}
复制代码

 

测试类:

复制代码
package com.zpj.designMode.builderpattern;import org.junit.Test;public class BuilderPatternTest {    @Test    public void test01(){        //给主管一个IBM的员工让主管告诉IBM的员工怎么创建一个IBM电脑        Director IBMDirector = new Director(new IBMCreator());        IBMDirector.createComputer();        //给主管一个Lenovo的员工让主管告诉IBM的员工怎么创建一个IBM电脑        Director lenovoDirector = new Director(new LenovoCreator());        lenovoDirector.createComputer();    }}
复制代码

 

 

此模式的目的就是为了避免创建复杂对象(对象需要由多个模块进行组合)出现问题,而把其创建过程封装起来,当使用的时候直接调用Director来进行创建,不需要调用处自行创建对象,减小错误的产生几率。

同时又实现了同一类型不同属性对象的灵活扩充。例如可以随意扩展多个个TCLComputer、ASUSComputer,来实现不同类型的Computer创建。

0 0
原创粉丝点击