• 创建型-建造者模式


    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. }
    
                    
  • 相关阅读:
    使用动态参数构建CUDA图
    Springboot 集成 Ehcache 提示 Cannot find cache named ‘employee_all‘ for Builder
    如何用Python让你的电脑说话
    基于SSM的疫苗预约接种平台
    金仓数据库KingbaseES安全指南--6.5. LDAP身份验证
    宝兰德受邀出席第八届丝绸之路网络安全论坛
    登峰造极,师出造化,Pytorch人工智能AI图像增强框架ControlNet绘画实践,基于Python3.10
    前后端分离开发,API接口这样写才简洁
    linux安装配置zeppein
    QT之tcp通信的简单例程
  • 原文地址:https://blog.csdn.net/qq_36457702/article/details/126096280