[Java学习笔记] 使用Builder Pattern 使物件初始化有预设参数

什么是预设参数?

允许函式在没有传入值的情况下,以指定的预设值初始化。

直观方法

建构子多载
public class Person{    private String name;    private int age;    private int gender;        public Person(String name, int age, int gender){        this.name = name;        this.age = age;        this.gender = gender;    }        public Person(int age, int gender){        this.name = "noName";   // 预设参数        this.age = age;        this.gender = gender    }}
困境-当参数型态相同时无法分辨省略了哪个参数, 如範例中的age和 gender当参数很多的时候,要写很多多型的建构子

简易的 Builder Pattern 概念

透过介面定义一个创建的过程,将物件的建构过程隐藏
* 使用情境: 当传入的物件较为複杂时, 分离创建步骤, 使创建过程更清晰 (请自行搜寻, 本篇不讨论)

public class Person{    ...     public Person(String name, int age, int gender){           ...    }}    public interface Builder{        //以介面分离    void setName(String name);    void setAge(int age);    void setGender(int gender);    void Person create();}public class concreteBuilder implements Builder{    // 实作介面方法}

使用Builder Pattern 完成物件初始化

public class Person{    ...     private Person(String name, int age, int gender){           // 将建构子存取权限设为私有, 让使用者无法直接创建        ...    }        public static class Builder{        // 透过静态Builder 物件创建物件        private String name;        private int age;        private int gender;                  public Builder(){            // 不需参数即可创建 (使用预设值)            this.name = "Diane";            this.age = 18;            this.gender = 2;        }        public Builder setName(String name){            // 开放方法让使用者可以选择性输入            this.name = name;            return this;        }        ....        public Person creat(){            // 必须透过Builder呼叫才可以创建物件            retrun new Person(name,age,int);        }    }}
public class Main {    public static void main(String[] args){        Person person = new Person.Builder().setName("Tina").create();        Person person2 = new Person.Builder().create();        System.out.println(person.getName());    //Tina        System.out.println(person2.getName());   //Diane    }}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章