当前位置: 首页 > news >正文

淄博个人网站建设互联网保险业务

淄博个人网站建设,互联网保险业务,海纳企业网站管理系统,怎么做好推广和营销笔者的碎碎念 其实之前有写过建造者模式的文章#xff0c;但是感觉其实写的不怎么样#xff0c;而且自己也理解的一般#xff0c;但是阅读一些框架源码发现#xff0c;这些模式真的蛮重要的#xff0c;很多框架例如OkHttp#xff0c;Retrofit等等都大量使用了建造者模式…笔者的碎碎念 其实之前有写过建造者模式的文章但是感觉其实写的不怎么样而且自己也理解的一般但是阅读一些框架源码发现这些模式真的蛮重要的很多框架例如OkHttpRetrofit等等都大量使用了建造者模式以及一些其他的设计模式于是决定对这些模式进行学习和整理将写一个专栏来记录自己的的学习记录你知道的好记性不如烂笔头加油 建造者模式的由来 因 Java 中没有命名参数的概念当一个类的构造器可选参数太多的时候代码可读性会变得很差。我们通过一个例子来说明假设我们有一个连接池的配置类 ConnectionPoolConfig它包含了多个可选参数比如 maxConnections最大连接数、minConnections最小连接数、timeout超时时间等。为了支持不同的配置选项最初可能会使用伸缩式构造器模式或者JavaBeans构造器模式来创建这个对象。 伸缩式构造器模式 public class ConnectionPoolConfig {private int maxConnections;private int minConnections;private int timeout;public ConnectionPoolConfig(int maxConnections, int minConnections, int timeout) {this.maxConnections maxConnections;this.minConnections minConnections;this.timeout timeout;} ...省略ConnectionPoolConfig中的其他构造方法// Getters and setters }使用伸缩式构造器模式我们可能会遇到以下问题 参数顺序依赖性 如果某些参数是可选的并且它们的顺序与构造函数中的参数顺序不匹配那么我们就不得不在构造对象时填充未使用的默认值比如 ConnectionPoolConfig config new ConnectionPoolConfig(10, 5, 0); // timeout 默认为 0参数类型相似性 如果两个参数类型相似比如都是整数在构造对象时容易搞错参数的顺序这可能会导致严重的错误。 JavaBeans构造器模式 然后我们针对这些进行改进有了后来的JavaBeans构造器模式。 public class ConnectionPoolConfig {private int maxConnections;private int minConnections;private int timeout;public ConnectionPoolConfig() {// Empty constructor}// Setterspublic void setMaxConnections(int maxConnections) {this.maxConnections maxConnections;}public void setMinConnections(int minConnections) {this.minConnections minConnections;}public void setTimeout(int timeout) {this.timeout timeout;} ...省略// Getters }使用JavaBeans构造器模式虽然解决了参数顺序依赖性的问题但引入了新的问题  对象状态不一致性 构建对象需要多次调用不同的 setter 方法这可能会导致对象在构造过程中处于不一致的状态。例如如果某个字段在设置之前被访问可能得到不完整或不正确的对象状态。  建造者模式 于是建造者模式Builder Pattern应运而生。 建造者模式在这些问题的基础上提供了更加灵活和安全的对象构建方式 public class ConnectionPoolConfig {private final int maxConnections;private final int minConnections;private final int timeout;private ConnectionPoolConfig(Builder builder) {this.maxConnections builder.maxConnections;this.minConnections builder.minConnections;this.timeout builder.timeout;}// Getterspublic static class Builder {private int maxConnections;private int minConnections;private int timeout;public Builder() {// 默认值或者空构造器}public Builder maxConnections(int maxConnections) {this.maxConnections maxConnections;return this;}public Builder minConnections(int minConnections) {this.minConnections minConnections;return this;}public Builder timeout(int timeout) {this.timeout timeout;return this;}public ConnectionPoolConfig build() {return new ConnectionPoolConfig(this);}} } 优点  链式调用 使用建造者模式可以使用链式调用来设置对象的各个属性清晰地表达出构建对象的步骤和顺序。 ConnectionPoolConfig config new ConnectionPoolConfig.Builder().maxConnections(10).minConnections(5).timeout(0).build();对象不可变性 在建造者模式中可以将对象设计为不可变的Immutable一旦构建完成后对象的状态不可修改保证了对象的线程安全性和一致性。消除对象状态不一致性问题 建造者模式通过在最终构建之前保持对象状态的一致性避免了JavaBeans模式中可能出现的对象状态不一致性问题。易于解耦将产品本身与产品创建过程进行解耦可以使用相同的创建过程来得到不同的产品。也就说细节依赖抽象。易于精确控制对象的创建将复杂产品的创建步骤分解在不同的方法中使得创建过程更加清晰易于拓展增加新的具体建造者无需修改原有类库的代码易于拓展符合“开闭原则“。 每一个具体建造者都相对独立而与其他的具体建造者无关因此可以很方便地替换具体建造者或增加新的具体建造者用户使用不同的具体建造者即可得到不同的产品对象。  模式原理 使用场景  建造者模式适用于需要创建复杂对象对象有多个部分且构建过程复杂的场景或者需要创建多个相似对象只有部分属性不同的场景。它有效地解决了伸缩式构造器模式和JavaBeans构造器模式存在的问题并提供了一种更加优雅和灵活的解决方案。你经常能在Android看到一些常见的技术框架中都使用了该模式例如OkHttp框架中就有它的大量使用。关于OkHttp我也有文章进行分析如果你感兴趣可以去看看OkHttp中是如何使用建造者模式的-【传送门】。 使用  构造者的创建客户端通过创建一个具体的建造者对象如 Builder并使用链式调用来设置产品的各个属性   ConnectionPoolConfig config new ConnectionPoolConfig.Builder().maxConnections(10).minConnections(5).timeout(30).build();属性设置 每次调用建造者的设置方法如 maxConnections、minConnections、timeout时建造者内部会更新自己的状态以便在构建最终产品时使用。 构建产品 最终调用 build() 方法时建造者将使用其内部状态来实例化并初始化产品对象 ConnectionPoolConfig并返回给客户端。
http://www.zqtcl.cn/news/310817/

相关文章:

  • 石家庄市住房和城乡建设厅网站好的企业型网站模板下载
  • 哈尔滨快速建站公司推荐网站刷流量会怎么样
  • 网站开发 顺德做新闻微网站有哪些
  • 如何阿里巴巴网站做推广苏州高新区建设局网站管网
  • 个人网站设计构思做汽车保养的网站
  • 在什么网站可以接国外的模具做中英文网站是怎么做的
  • 网站中的文字滑动怎么做的沈阳模板建站定制
  • 国内网站开发二手房网站开发背景
  • 电商网站建设与管理实践电商网站前端制作分工
  • 外贸公司怎么接订单网站编辑做seo好做吗
  • 科技企业网站建设珠海微信网站开发
  • 科凡网站建设小程序自己开发
  • 专门做金融的招聘网站wordpress 价格
  • 微商城网站建设信息定制程序网站
  • 电子政务网站开发餐饮品牌设计包括哪些
  • 深圳手机商城网站设计公司网站做会员用什么源码
  • 安康网站建设公司价格pathon做网站
  • jq网站模板宣城有做网站的公司吗
  • 江苏个人备案网站内容大连seo加盟
  • 服装网站建设公司地址公司网站建设需要注意什么
  • 免费行情软件网站下载安装电子商务网站建设实训报告
  • wordpress怎么添加企业网站美化网站公司
  • 工作室网站源码全球军事网站
  • 网站设计模板免费建站珠海正规网站制作排名费用多少
  • 北京沙河教做网站的wordpress增加自适应功能
  • 中国著名的个人网站网站设计怎么做ppt答辩
  • 郑州做招商的网站网站后台主流网站开发语言
  • 专业足球网站开发铜陵网站优化
  • 南昌高端网站开发山西太原网站建设公司
  • 青岛专业制作网站的公司吗百度咨询