Builder 模式
生活随笔
收集整理的這篇文章主要介紹了
Builder 模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Builder 模式
@(JAVA)[java]
參考《effetive java》
詳細代碼請見
當一個類中有很多屬性,而且大部分屬性為空時,如果要為這個類提供一個完整屬性列表的構造函數的話,會使用這個類被調用時需要提供所有的參數,這會非常的麻煩。因為大部分屬性都是為空的。
或者可以提供多個構造函數,分別適配不同的情形,但這樣的話會導致構造函數非常多,而且調用這些構建函數時很容易混淆不同的參數(特別是這些參數有相同的類型)。
而Builder模式可以解決以上問題,它通過一個Builder類來構造一個對象,而不是以這個類的構造函數,同時以各種各樣的setter方法對需要更改默認屬性的進行設置。
下面的例子中,以一個person類為例,它的name屬性是必選的,其它為可選。以下代碼的輸出為:ljh5113579246810unkowngz
/*** */ package org.ljh.javademo.builderpatter;/*** date: 2016年3月4日 下午4:00:22* * @author LUJINHONG lu_jin_hong@163.com Function: TODO ADD FUNCTION. last* modified: 2016年3月4日 下午4:00:22*/public class Person {private final String name;private final int age;private final int gender;private final String phoneNum;private final String email;private final String city;private Person(Builder builder) {name = builder.name;age = builder.age;gender = builder.gender;phoneNum = builder.phoneNum;email = builder.email;city = builder.city;}//Person類的其它公有方法,還可以有walk(), run(), eat()等。public String getMessage(){return name + age + gender + phoneNum + email + city; }public static class Builder {private String name;private int age = -1;private int gender = 1;private String phoneNum = "unkown";private String email = "unkown";private String city = "unkown";public Builder(String name) {this.name = name;}public Person build(){return new Person(this);}public Builder age(int age) {this.age = age;return this;}public Builder gender(int gender) {this.gender = gender;return this;}public Builder phoneNum(String phoneNum) {this.phoneNum = phoneNum;return this;}public Builder email(String email) {this.email = email;return this;}public Builder city(String city) {this.city = city;return this;}}//通過會有其它類中進行調用,這是為了方便,在本類中進行demo調用。public static void main(String[] args){Person ljh = new Person.Builder("ljh").age(5).gender(1).phoneNum("13579246810").city("gz").build();System.out.println(ljh.getMessage());} }總結
以上是生活随笔為你收集整理的Builder 模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hbase编程指南
- 下一篇: Storm源码分析之四: Trident