• 创建型-建造者模式


    1. /**
    2. *

    3. * 建造者模式(应用场景:有必填字段,但参数过多,通过构造器创建会因为参数过多导致可读性差,属性之间有依赖关系,需要在创建对象之前进行前置参数字段校验)
    4. * name必填无默认值
    5. * maxTotal非必填默认值为8
    6. * maxIdle非必填默认值为8
    7. * minIdle非必填默认值为8
    8. *

    9. * @author jiangwentao
    10. * @version :ResourcePoolConfig.java v1.0 2022/7/20 17:00 jiangwentao Exp $
    11. */
    12. public class ResourcePoolConfig {
    13. private String name;
    14. private int maxTotal;
    15. private int maxIdle;
    16. private int minIdle;
    17. private ResourcePoolConfig (Builder builder) {
    18. this.name = builder.name;
    19. this.maxTotal = builder.maxTotal;
    20. this.maxIdle = builder.maxIdle;
    21. this.minIdle = builder.minIdle;
    22. }
    23. public String getName() {
    24. return name;
    25. }
    26. public int getMaxTotal() {
    27. return maxTotal;
    28. }
    29. public int getMaxIdle() {
    30. return maxIdle;
    31. }
    32. public int getMinIdle() {
    33. return minIdle;
    34. }
    35. @Override
    36. public String toString() {
    37. return "ResourcePoolConfig{" +
    38. "name='" + name + '\'' +
    39. ", maxTotal=" + maxTotal +
    40. ", maxIdle=" + maxIdle +
    41. ", minIdle=" + minIdle +
    42. '}';
    43. }
    44. public static class Builder {
    45. private static final int MAX_TOTAL = 8;
    46. private static final int MAX_IDLE = 8;
    47. private static final int MIN_IDLE = 0;
    48. private String name;
    49. private int maxTotal = MAX_TOTAL;
    50. private int maxIdle = MAX_IDLE;
    51. private int minIdle = MIN_IDLE;
    52. public ResourcePoolConfig build() {
    53. if (this.name == null || name == "") {
    54. throw new IllegalArgumentException("name属性必填");
    55. }
    56. if (this.minIdle > this.maxIdle) {
    57. throw new IllegalArgumentException("配置参数不合法");
    58. }
    59. return new ResourcePoolConfig(this);
    60. }
    61. public Builder name(String name) {
    62. this.name = name;
    63. return this;
    64. }
    65. public Builder maxTotal(int maxTotal) {
    66. this.maxTotal = maxTotal;
    67. return this;
    68. }
    69. public Builder maxIdle(int maxIdle) {
    70. this.maxIdle = maxIdle;
    71. return this;
    72. }
    73. public Builder minIdle(int minIdle) {
    74. this.minIdle = minIdle;
    75. return this;
    76. }
    77. }
    78. //示例
    79. public static void main(String[] args) {
    80. ResourcePoolConfig config = new Builder()
    81. .name("redis")
    82. .maxIdle(10)
    83. .minIdle(3)
    84. .build();
    85. ResourcePoolConfig mysql = new ResourcePoolConfig.Builder().name("mysql").maxTotal(15).maxIdle(5).minIdle(20).build();
    86. System.out.println(config);
    87. System.out.println(mysql);
    88. }
    89. }
    
                    
  • 相关阅读:
    大数据学习——linux操作系统(Centos)安装mysql(Hive的元数据库)
    flask框架初学-07-数据库映射关系
    Flutter快学快用22 自渲染模式:从 Flutter 的渲染原理,进一步掌握性能优化策略
    BENTLY 350015 127610-01数字量输入模块
    机器学习-LightGBM算法分类器-附python代码
    iPhone苹果手机来电收到消息闪光灯闪烁通知提醒功能怎么开启?
    华为云分布式数据库GaussDB,做金融数字化的坚实数据底座
    Java—多态
    Webpack5学习大纲笔记
    前端页面设计 | 博客系统
  • 原文地址:https://blog.csdn.net/qq_36457702/article/details/126096280