邯郸做wap网站费用,福州网龙网络公司,广东品牌女装都有哪些品牌,先做网站还是先申请域名本文实践代码仓库#xff1a;https://github.com/goSilver/my_practice 文章目录 一、定义二、作用三、实现四、总结 一、定义 
建造者模式是一种创建复杂对象的设计模式。它将一个复杂对象的构建过程分解为多个简单的步骤#xff0c;并且允许按照特定的顺序来构建对象。通过… 本文实践代码仓库https://github.com/goSilver/my_practice 文章目录 一、定义二、作用三、实现四、总结  一、定义 
建造者模式是一种创建复杂对象的设计模式。它将一个复杂对象的构建过程分解为多个简单的步骤并且允许按照特定的顺序来构建对象。通过使用建造者模式我们可以将对象的构建算法与表示分离从而可以使用相同的构建过程来创建不同的表示。通过使用建造者模式我们可以更加灵活地构建复杂对象同时也可以避免构造方法的参数过多和构造方法的复杂性。 
二、作用 
避免目标对象构造函数的参数列表过多影响代码的可读性和可维护性解决参数之间存在依赖关系时的校验逻辑避免目标对象暴露set()方法保证对象不可变避免目标对象存在中间无效状态。 
三、实现 
创建一个Builder类专门用于对象的创建先创建建造者并且通过 set() 方法设置建造者的变量值然后在使用 build() 方法真正创建对象之前做集中的校验校验通过之后才会创建对象。 
此处定义一个ResourcePoolConfig连接池资源类并为它再定义一个Builder类由Builder类提供set()方法和包含复杂校验逻辑的build()方法。 
public class ResourcePoolConfig {private String name;private int maxTotal;private int maxIdle;private int minIdle;private ResourcePoolConfig(Builder builder) {this.name  builder.name;this.maxTotal  builder.maxTotal;this.maxIdle  builder.maxIdle;this.minIdle  builder.minIdle;}//...省略getter方法.../*** 我们将Builder类设计成了ResourcePoolConfig的内部类。* 我们也可以将Builder类设计成独立的非内部类ResourcePoolConfigBuilder。*/public static class Builder {private static final int DEFAULT_MAX_TOTAL  8;private static final int DEFAULT_MAX_IDLE  8;private static final int DEFAULT_MIN_IDLE  0;private String name;private int maxTotal  DEFAULT_MAX_TOTAL;private int maxIdle  DEFAULT_MAX_IDLE;private int minIdle  DEFAULT_MIN_IDLE;public ResourcePoolConfig build() {// 校验逻辑放到这里来做包括必填项校验、依赖关系校验、约束条件校验等if (StrUtil.isBlank(name)) {throw new IllegalArgumentException(name should not be empty.);}if (maxIdle  maxTotal) {throw new IllegalArgumentException(maxIdle  maxTotal);}if (minIdle  maxTotal || minIdle  maxIdle) {throw new IllegalArgumentException(minIdle  maxTotal or minIdle  maxIdle);}return new ResourcePoolConfig(this);}public Builder setName(String name) {if (StrUtil.isBlank(name)) {throw new IllegalArgumentException(...);}this.name  name;return this;}public Builder setMaxTotal(int maxTotal) {if (maxTotal  0) {throw new IllegalArgumentException(...);}this.maxTotal  maxTotal;return this;}public Builder setMaxIdle(int maxIdle) {if (maxIdle  0) {throw new IllegalArgumentException(...);}this.maxIdle  maxIdle;return this;}public Builder setMinIdle(int minIdle) {if (minIdle  0) {throw new IllegalArgumentException(...);}this.minIdle  minIdle;return this;}}
}四、总结 
和工厂模式有何区别 
工厂模式是用来创建不同但是相关类型的对象继承同一父类或者接口的一组子类由给定的参数来决定创建哪种类型的对象。建造者模式是用来创建一种类型的复杂对象通过设置不同的可选参数“定制化”地创建不同的对象。 
网上有一个经典的例子很好地解释了两者的区别。 
顾客走进一家餐馆点餐我们利用工厂模式根据用户不同的选择来制作不同的食物比如披萨、汉堡、沙拉。对于披萨来说用户又有各种配料可以定制比如奶酪、西红柿、起司我们通过建造者模式根据用户选择的不同配料来制作披萨。 
弊端 
使用建造者模式来构建对象目标对象的成员变量需要在Builder类中重新定义一遍。