zoukankan      html  css  js  c++  java
  • 建造者模式

    建造者模式(Builder Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。

    它将一个复杂的对象的构建分成多个简单的步骤。

    当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用建造者模式

    建造者实现步骤:

      1、在Setting 中创建一个静态内部类 Builder(私有化构造),然后将 Setting中的属性都复制到Builder类中

      2、在Setting 中创建一个 builder()方法,用于实例化Builder

      3、在Setting 中创建一个private的构造函数,参数为Builder类型,将Builder内的属性赋值给Setting内的属性

      4、Builder中创建设置函数,对Setting中那些可选参数进行赋值,返回值为Builder类型的实例

      5、在Builder中创建一个builder()方法,在其中构建Setting的实例并返回

    代码:

    public class Settings {
        private final int maxSize;
        private final int minSize;
        private final int maxWaitQueueSize;
        private final long maxWaitTimeMS;
    
        /**
         * 返回建造器的实例
         */
        public static Builder builder() {
            return new Builder();
        }
    
        /**
         * 私有化构造,参数为Builder,用于创建Setting实例并初始化属性
         */
        private Settings(final Builder builder) {
            maxSize = builder.maxSize;
            minSize = builder.minSize;
            maxWaitQueueSize = builder.maxWaitQueueSize;
            maxWaitTimeMS = builder.maxWaitTimeMS;
        }
    
        /**
         * 建造器
         */
        public static final class Builder {
            private int maxSize;
            private int minSize;
            private int maxWaitQueueSize;
            private long maxWaitTimeMS;
    
            private Builder() {
            }
    
            public Builder maxSize(final int maxSize) {
                this.maxSize = maxSize;
                return this;
            }
    
            public Builder minSize(final int minSize) {
                this.minSize = minSize;
                return this;
            }
    
            public Builder maxWaitQueueSize(final int maxWaitQueueSize) {
                this.maxWaitQueueSize = maxWaitQueueSize;
                return this;
            }
    
            public Builder maxWaitTimeMS(final long maxWaitTimeMS) {
                this.maxWaitTimeMS = maxWaitTimeMS;
                return this;
            }
    
            public Settings build() {
                return new Settings(this);
            }
    
        }
    
    
        /**
         * Setting 的getter方法
         */
        public int getMaxSize() {
            return maxSize;
        }
    
        public int getMinSize() {
            return minSize;
        }
    
        public int getMaxWaitQueueSize() {
            return maxWaitQueueSize;
        }
    
        public long getMaxWaitTimeMS() {
            return maxWaitTimeMS;
        }
    }

    使用建造器创建Setting实例:

     Settings settings = Settings.builder()
                    .minSize(1)
                    .maxSize(2)
                    .maxWaitQueueSize(5)
                    .maxWaitTimeMS(1000L)
                    .build();

    END.

  • 相关阅读:
    mysql之全局查询日志
    使用MySQL Workbench进行数据库设计——MySQL Workbench使用方法总结
    HttpClient工具类
    JSON字符串转换为Map
    Java判断一个日期是否在下周日期区间
    Linux 查看日志文件
    判断一个日期是否为当前日期的前后几天的方法
    Spring-Boot 整合Dubbo 解决@Reference 注解为null情况
    spring注解之@Scope
    Swagger Annotation 详解(建议收藏)
  • 原文地址:https://www.cnblogs.com/yangyongjie/p/14519803.html
Copyright © 2011-2022 走看看