美文网首页
学习笔记:设计模式之建造者模式

学习笔记:设计模式之建造者模式

作者: 大力papa | 来源:发表于2020-09-29 16:11 被阅读0次

本文仅供学习交流使用,侵权必删。
不作商业用途,转载请注明出处

WHAT 什么是建造者

建造者模式(builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者主要用于创建一些复杂的对象,这些对象内部的构建通常是非常复杂的过程。


建造者UML

WHY 为什么使用建造者

  • 如果一个类具有非常多属性,为了避免构造函数的参数列表太长,影响可读性。
  • 建造者的好处是对象的创建代码和对象本身的代码解耦,调用者无需关心复杂的构建过程。提高代码的易用性
  • 建造者能让用户使用到的是一个构造完整的对象,用户不会调用到一个未构造完整的对象。

HOW 建造者的实现(JAVA)

场景:创建一个资源配置对象,内部可能存在复杂的构造过程

  • 资源配置类和建造器
package builderDesignPattern;

public class ResourceConfig {
    private String url;
    private String pwd;
    private String user;
    private int coreSize;
    private int maxSize;
    
    private ResourceConfig() {
    }

    public ResourceConfig(String url, String user, String pwd, int coreSize, int maxSize) {
        this.url = url;
        this.user = user;
        this.pwd = pwd;
        this.coreSize = coreSize;
        this.maxSize = maxSize;
    }


    @Override
    public String toString() {
        return "ResourceConfig{" +
                "url='" + url + '\'' +
                ", pwd='" + pwd + '\'' +
                ", user='" + user + '\'' +
                ", coreSize=" + coreSize +
                ", maxSize=" + maxSize +
                '}';
    }

    public static class ResourceConfigBuilder {
        private String url;
        private String pwd;
        private String user;
        private int coreSize;
        private int maxSize;

        public ResourceConfigBuilder setUrl(String url) {
            this.url = url;
            return this;
        }

        public ResourceConfigBuilder setPwd(String pwd) {
            this.pwd = pwd;
            return this;
        }

        public ResourceConfigBuilder setUser(String user) {
            this.user = user;
            return this;
        }

        public ResourceConfigBuilder setCoreSize(int coreSize) {
            this.coreSize = coreSize;
            return this;
        }


        public ResourceConfigBuilder setMaxSize(int maxSize) {
            this.maxSize = maxSize;
            return this;
        }

        public ResourceConfig build() {
            if (isEmpty(url)) {
                throw new IllegalArgumentException();
            }

            if (isEmpty(user)) {
                throw new IllegalArgumentException();
            }

            if (isEmpty(pwd)) {
                throw new IllegalArgumentException();
            }

            if (coreSize > maxSize || coreSize <= Integer.MIN_VALUE) {
                throw new IllegalArgumentException();
            }

            if (coreSize > maxSize || maxSize >= Integer.MAX_VALUE) {
                throw new IllegalArgumentException();
            }

            return new ResourceConfig(url, user, pwd, coreSize, maxSize);
        }

        private boolean isEmpty(String s) {
            return s == null || s.isEmpty();
        }

    }
}

  • 客户端
public class BuilderClient {
    public static void main(String[] args) {
        String url = "https://www.xxoo.com";
        String user = "admin";
        String pwd = "a123";
        ResourceConfig resourceConfig = new ResourceConfig.ResourceConfigBuilder().setCoreSize(1)
                .setMaxSize(5).setUrl(url).setUser(user).setPwd(pwd).build();
        System.out.println(resourceConfig.toString());
    }
}

持续更新...

相关文章

网友评论

      本文标题:学习笔记:设计模式之建造者模式

      本文链接:https://www.haomeiwen.com/subject/odxzjktx.html