博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式快速学习(四)建造者模式
阅读量:6812 次
发布时间:2019-06-26

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

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

优点
  1. 建造者独立,易扩展。
  2. 便于控制细节风险。
缺点
  1. 产品必须有共同点,范围有限制。
  2. 如内部变化复杂,会有很多的建造类。

角色介绍

建造者模式有四个角色

  1. Product(产品类):要建造的对象
  2. builder(抽象建造者):规范建造对象的组成成分,但不具体创建。
  3. ConcreteBuilder(具体建造者):根据抽象建造者规范的组成成分来具体创建,并返回建造对象(产品类)实例。
  4. Director(指导者):调用具体建造者来建造各个部分,指导者只需要关注建造顺序,而不需要关注各成分(产品类属性)具体信息。

执行顺序: Director->builder->ConcreteBuilder 最后返回Product

产品类

要建造的对象

public class Phone {    /**     * 处理器     */    private String cpu;    /**     * 屏幕     */    private String screen;    /**     * 相机     */    private String camera;getter and setter...复制代码

抽象建造者

规范建造对象的组成成分,但不具体创建。

public interface PhoneBuilder {    void buildScreen();    void buildCpu();    void buildCamera();    Phone buildPhone();}复制代码

具体建造者

根据抽象建造者规范的组成成分来具体创建,并返回建造对象(产品类)实例。

public class ConcreteBuilder implements PhoneBuilder{    public Phone phone;    public ConcreteBuilder() {        phone = new Phone();    }    @Override    public void buildScreen() {        phone.setScreen("三星OLED屏幕");    }    @Override    public void buildCpu() {        phone.setCpu("骁龙845");    }    @Override    public void buildCamera() {        phone.setCamera("SONY");    }    @Override    public Phone buildPhone() {        return this.phone;    }}复制代码

指导者

调用具体建造者来建造各个部分,指导者只需要关注建造顺序,而不需要关注各成分(产品类属性)具体信息。

public class Direct {    public Phone constructMi8(PhoneBuilder phoneBuilder){        phoneBuilder.buildCamera();        phoneBuilder.buildCpu();        phoneBuilder.buildScreen();        return phoneBuilder.buildPhone();    }}复制代码

测试

public class Main {    public static void main(String[] args) {        Direct direct = new Direct();        Phone phone = direct.constructMi8(new ConcreteBuilder());        System.out.println(phone);    }}复制代码
Phone{cpu='骁龙845', screen='三星OLED屏幕', camera='SONY'}复制代码

与抽象工厂模式区别

建造者模式和抽象工厂模式是很像的(都是创建产品类实例),建造者模式比它多了一个指导者的角色,所以它们的最大区别在于

建造者模式只需要关注产品类建造的顺序,而不需要关注其具体信息。

而抽象工厂模式需要关注其具体信息去创建产品类。

抽象工厂模式顺风车:

转载地址:http://cxzzl.baihongyu.com/

你可能感兴趣的文章
噪音引来抗议 法庭命令关闭巴黎一个数据中心
查看>>
困难重重,错误铺就的混合云之路
查看>>
第二季度全球服务器市场出货量增长2%
查看>>
诺基亚出价166亿美元收购阿尔卡特朗讯
查看>>
人工智能就像电力,NVIDIA开始为智能安防行业“供电”
查看>>
SDN趋势回顾:2016年是软件定义WAN元年
查看>>
如何在CentOS和RHEL系统上安装或自动更新安全补丁
查看>>
路由器成帮凶!第二季度DDoS攻击翻倍
查看>>
Uber数据基础架构现在及未来
查看>>
SDN/NFV:融合与博弈持续共存
查看>>
常见的JavaScript易错知识点整理
查看>>
RagingWire战略重点批发数据中心服务
查看>>
数据中心的规模是否影响虚拟化DCIM的决策?
查看>>
后流量时代,世间再无电信运营商
查看>>
李开复:钉钉是大胆的突破式创新
查看>>
我国特色国情下 智慧城市建设与国外有哪些区别
查看>>
MaxCompute帮助创业公司中减轻MySQL存储压力
查看>>
ASHRAE新标准促进降低数据中心能源消耗
查看>>
程序猿如何从产品的角度去提升应用的体验之Android权限优化篇
查看>>
夏普欲收回美洲品牌授权 海信总裁:严格按照合同办
查看>>