public class RedisConfig {private String name;private String ip;private int maxIdle;private int minIdle;//不设置set方法,即为不可变对象public String getName() {return name;}public String getIp() {return ip;}public int getMaxIdle() {return maxIdle;}public int getMinIdle() {return minIdle;}//私有方法,只能通过builder创建,然后就会校验private RedisConfig(Builder builder) {this.name = builder.name;this.ip = builder.ip;this.maxIdle = builder.maxIdle;this.minIdle = builder.minIdle;}//设计为内部类public static class Builder {private String name;private String ip;private int maxIdle = 100;private int minIdle = 10;public RedisConfig build() {//增加了校验逻辑if (StringUtils.isEmpty(name)) {throw new RuntimeException("...");}if (StringUtils.isEmpty(ip)) {throw new RuntimeException("...");}return new RedisConfig(this);}public Builder setName(String name) {this.name = name;return this;}public Builder setIp(String ip) {this.ip = ip;return this;}public Builder setMaxIdle(int maxIdle) {this.maxIdle = maxIdle;return this;}public Builder setMinIdle(int minIdle) {this.minIdle = minIdle;return this;}}//testpublic static void main(String[] args) {RedisConfig config = new Builder().setName("builder").setIp("127.0.0.1").setMinIdle(100).setMaxIdle(1000).build();}}
与工厂模式的区别
工厂模式是用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定常进啊那种类型的对象。
建造者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,定制化的创建不同的对象。
如:用工厂模式创建不同的食物,汉堡,沙拉等,用建造者模式创建不同口味的披萨
