Builder构建者模式 通用模板
来源:互联网 发布:自学编程 知乎 编辑:程序博客网 时间:2024/06/07 04:51
能看到这篇文章的读者,我想应该或多或少了解Builder构建者模式。在Builder模式出现之前,构建对象会有如下两个问题:
在属性过多的情况下,需要在构造函数中一次性传递所有需要初始化的参数,并且可能会根据需求override多个不同参数组合的构造函数。比较麻烦。
如果是创建一个无参的空对象,通过setter方法,为每一个属性值赋值的话,有一个很大的问题就是会出现对象不一致的情况。也就是说由于setter方法可以在任何时间和地方可以为对象属性重新赋值,可能导致程序上下文对象的属性出现不一致的情况,这在序列化或者多线程的情境下会因为对象不一致而产生bug隐患。
Builder构建者模式就可以很好的解决上述的两个问题。好了废话不多说,直接上CODE。下面我通过一个Config类,来实现一个构建者模式,其他情况可以参考这个进行相应修改。思路是一致的。
public class Config { private String protocol; private String ip; private String port; public String getProtocol() { return protocol; } public String getIp() { return ip; } public String getPort() { return port; } @Override public String toString() { return "Config{" + "protocol='" + protocol + '\'' + ", ip='" + ip + '\'' + ", port='" + port + '\'' + '}'; } //新增Builder静态类并赋默认值 public static class Builder { private String protocol = "http://"; private String ip = "127.0.0.1"; private String port = "80"; //为每一个属性创建返回自身Builder对象的方法 public Builder setProtocol(String protocol) { this.protocol = protocol; return this; } public Builder setIp(String ip) { this.ip = ip; return this; } public Builder setPort(String port) { this.port = port; return this; } //新建一个aplly方法,传一个父类引用,赋值构建的参数 public void apply2Super(Config config) { config.protocol = this.protocol; config.ip = this.ip; config.port = this.port; } //新建一个build方法,创建一个父类对象,传递给apply方法为这个空对象赋构建出来的参数值,返回这个构建对象即可。 public Config build(){ Config config = new Config(); apply2Super(config); return config; } }}
调用方式:
//使用默认值构建 Config config1 = new Config.Builder().build(); System.out.println(config1); //自定义构造参数 Config config = new Config.Builder() .setProtocol("https://") .setIp("192.168.0.1.") .setPort("8080") .build(); System.out.println(config);
总结
1、在需要构造的类中新增Builder静态类并赋默认值
2、为每一个属性创建返回自身Builder对象的方法
3、新建一个aplly方法,传一个父类引用,赋值构建的参数
4、新建一个build方法,创建一个父类对象,传递给apply方法为这个空对象赋构建出来的参数值,返回这个构建对象即可。
P.S:
给大家安利一本书《大话设计模式》 作者是程杰的那个。这本书通俗易懂的讲解了所有的设计模式,是我看到过的所有讲设计模式中,最容易理解,最干净利索的。我现在正在根据书中讲的和我自身的理解,实现每一个设计模式。github地址:https://github.com/longzhiwuing/GOFDemos 欢迎拍砖和STAR
- Builder构建者模式 通用模板
- 构建者模式(Builder)
- Java构建者模式(Builder)
- 构建者模式(Builder)
- Android 构建者模式(Builder)
- 构建者(Builder)模式
- 构建者模式——Builder模式
- 设计模式之构建者Builder模式
- 设计模式之Builder构建者模式
- 理解构建者模式(Builder)
- Android中的构建者(Builder)模式
- 构建者模式-Builder、Director、Product
- Builder 构建器模式
- Builder(构建模式)
- Builder 构建模式
- 构建模式 Builder
- 设计模式——__构建者模式 Builder模式
- 设计模式——构建者模式(Builder)
- 程序员面试金典: 9.13 C和C++ 13.9编写对齐的malloc和free函数。
- 392. Is Subsequence
- 分治法求解最大数组
- LTE的小区搜索和PBCH接收
- 分布式MySQL集群方案的探索与思考
- Builder构建者模式 通用模板
- 看日志
- 异常类型_异常变量的生命周期
- VI的虚拟编辑-Visual(3)
- js常见问题汇总(不定期更新)
- Android学习-传感器的使用
- op的压摆率和增益带宽积的选择
- 17 - 04 - 14 Web安全(10)
- 删除指定节点的两种方法