设计模式—建造者模式

建造者模式:把工人(对象组件的建造者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创建。

posted @ 2017-04-03 22:35  张柯宇  阅读(244)  评论(0编辑  收藏  举报
友情链接:回力鞋专卖店 | 中老年服装 | 新航道 | 雅思培训机构 | 雅思培训强化班