博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式—建造者模式
阅读量:4497 次
发布时间:2019-06-08

本文共 2389 字,大约阅读时间需要 7 分钟。

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

转载于:https://www.cnblogs.com/zhangkeyu/p/6663864.html

你可能感兴趣的文章
kubernetes 之一些报错
查看>>
PHP isset()、empty()、is_null()的使用区别详解
查看>>
软件产品案例分析(团队)
查看>>
eclipse中svn插件的安装
查看>>
北京赛区总结
查看>>
Mysql安装后的一些设置
查看>>
4、Qt Project之串口数据传输
查看>>
Python List reverse()方法
查看>>
Jmeter 正则提取器
查看>>
lua -- 生成协议
查看>>
HLP帮助文件源文件RTF文件的编写
查看>>
2.30模型字符串拷贝
查看>>
XPATH怎么获取TITLE中有中文的标签
查看>>
Tomcat中server.xml参数说明
查看>>
堆排序-HeapSort
查看>>
抽象类
查看>>
CentOS7_RAID5_LVM_SAMBA
查看>>
CAS环境搭建-证书方式(https连接)
查看>>
机器学习基本概念
查看>>
减肥 节食与长寿
查看>>