• [Spring Pattern] Builder pattern


    First, let's see the code:

    // builder/Contact.java
    
    public class Contact {
        private String firstName;
        private String lastName;
        private String emailAddress;
    
        public Contact() {
            super()
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(final String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(final String lastName) {
            this.lastName = lastName;
        }
    
        public String getEmailAddress() {
            return emailAddress;
        }
    
        public void setEmailAddress(final String emailAddress) {
            this.emailAddress = emailAddress;
        }
    }

    Using it:

        @GetMapping("presidents")
        public List<Contact> getPresidents() {
            List<Contact> contacts = new ArrayList<>();
    
            Contact contact = new Contact();
            contact.setFirstName("George");
            contact.setLastName("Washington");
            contacts.add(contact);
    
            contacts.add(new Contact("John", "Adams", null));
    
            return contacts;
        }

    For the highlighted part, there are two ways to create contact object.

    One is multi lines:

            Contact contact = new Contact();
            contact.setFirstName("George");
            contact.setLastName("Washington");
            contacts.add(contact);

    Another way is single line:

    contacts.add(new Contact("John", "Adams", null));

    The problems are 1. too much line of code when object get complex; 2. The order of params you need to rememeber.

    Builder pattern:

    public class ContactBuilder {
        private String firstName;
        private String lastName;
        private String emailAddress;
    
        public ContactBuilder setFirstName(final String firstName) {
            this.firstName = firstName;
            return this;
        }
    
        public ContactBuilder setLastName(final String lastName) {
            this.lastName = lastName;
            return this;
        }
    
        public ContactBuilder setEmailAddress(final String emailAddress) {
            this.emailAddress = emailAddress;
            return this;
        }
    
        public Contact buildContact () {
            return new Contact(firstName, lastName, emailAddress);
        }
    }

    Keep returning 'this' to enable chaining method calls. 

    Using it:

        @GetMapping("presidents")
        public List<Contact> getPresidents() {
            List<Contact> contacts = new ArrayList<>();
    
            Contact contact = new Contact();
            contact.setFirstName("George");
            contact.setLastName("Washington");
            contacts.add(contact);
    
            contacts.add(new Contact("John", "Adams", null));
    
            // using ContactBuilder
            contacts.add(
                    new ContactBuilder()
                            .setFirstName("Thomas")
                            .setLastName("Jefferson")
                            .buildContact()
            )
            return contacts;
        }

    When to use this pattern:

    1. Useful when object creation has many parameters

    2. Becomes increasingly more useful when some or all parameters are optional

    3. Can make code easier to read because of reduced lines for construction when compared with setters

  • 相关阅读:
    Java基础知识
    spring data jpa 表关联设置用户表关联角色表配置
    centos 服务器 nginx 负载均衡服务安装
    Java jdk 8 新特性
    个人收款支付系统-半自动化解决方案
    纯净版Windows7系统迅雷下载路径
    Centos里开机自启动Node 服务程序
    Centos 7将java jar包自定义开机启动服务
    安装zabbix-agent客户端
    Centos7系统安装Zabbix4.4(yum源安装)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13969683.html
Copyright © 2020-2023  润新知