1. public class RedisConfig {
  2. private String name;
  3. private String ip;
  4. private int maxIdle;
  5. private int minIdle;
  6. //不设置set方法,即为不可变对象
  7. public String getName() {
  8. return name;
  9. }
  10. public String getIp() {
  11. return ip;
  12. }
  13. public int getMaxIdle() {
  14. return maxIdle;
  15. }
  16. public int getMinIdle() {
  17. return minIdle;
  18. }
  19. //私有方法,只能通过builder创建,然后就会校验
  20. private RedisConfig(Builder builder) {
  21. this.name = builder.name;
  22. this.ip = builder.ip;
  23. this.maxIdle = builder.maxIdle;
  24. this.minIdle = builder.minIdle;
  25. }
  26. //设计为内部类
  27. public static class Builder {
  28. private String name;
  29. private String ip;
  30. private int maxIdle = 100;
  31. private int minIdle = 10;
  32. public RedisConfig build() {
  33. //增加了校验逻辑
  34. if (StringUtils.isEmpty(name)) {
  35. throw new RuntimeException("...");
  36. }
  37. if (StringUtils.isEmpty(ip)) {
  38. throw new RuntimeException("...");
  39. }
  40. return new RedisConfig(this);
  41. }
  42. public Builder setName(String name) {
  43. this.name = name;
  44. return this;
  45. }
  46. public Builder setIp(String ip) {
  47. this.ip = ip;
  48. return this;
  49. }
  50. public Builder setMaxIdle(int maxIdle) {
  51. this.maxIdle = maxIdle;
  52. return this;
  53. }
  54. public Builder setMinIdle(int minIdle) {
  55. this.minIdle = minIdle;
  56. return this;
  57. }
  58. }
  59. //test
  60. public static void main(String[] args) {
  61. RedisConfig config = new Builder().setName("builder").setIp("127.0.0.1").setMinIdle(100).setMaxIdle(1000)
  62. .build();
  63. }
  64. }

与工厂模式的区别

工厂模式是用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定常进啊那种类型的对象。
建造者模式是用来创建一种类型的复杂对象,通过设置不同的可选参数,定制化的创建不同的对象。

如:用工厂模式创建不同的食物,汉堡,沙拉等,用建造者模式创建不同口味的披萨