Java中常用的設計模式之建造者模式詳解
優點
1.建造者獨立,易擴展。
2.便於控制細節風險。
缺點
1.產品必須有共同點,范圍有限制。
2.如內部變化復雜,會有很多的建造類。
使用場景
1.需要生成的對象具有復雜的內部結構。
2.需要生成的對象內部屬性本身相互依賴。
一、實現方式
package com.asurplus.common.builder.style1; public class UserInfo { private String name; private int age; /** * 創建一個新的建造者 * * @return */ public static UserInfoBuilder builder() { return new UserInfoBuilder(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "UserInfo{" + "name='" + name + ", age=" + age + '}'; } /** * 建造者內部類 */ public static class UserInfoBuilder { private String name; private int age; public UserInfoBuilder name(String name) { this.name = name; return this; } public UserInfoBuilder age(int age) { this.age = age; return this; } /** * 創建一個新的實例對象並賦值 * * @return */ public UserInfo build() { UserInfo userInfo = new UserInfo(); userInfo.setName(this.name); userInfo.setAge(this.age); return userInfo; } } }
我們定義瞭一個 UserInfo 類,有 name,age 兩個屬性,還定義瞭一個靜態內部類 UserInfoBuilder,幫助我們建造 UserInfo,並提供鏈式調用的方法。
二、實現方式
1、引入依賴
<!-- lombok插件 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
Lombok 需要在 IDEA 中安裝插件,具體方法,請百度。
2、實現
package com.asurplus.common.builder.style2; import lombok.Builder; import lombok.Data; /** * get set toString 方法註解 */ @Data /** * 建造者模式註解 */ @Builder public class UserInfo2 { private String name; private int age; }
基於 Lombok 的註解,我們省略瞭大部分代碼,但是具體的實現方式和我們的方式一是一模一樣的,調用方法也是一樣的。
三、測試
package com.asurplus.common.builder; import com.asurplus.common.builder.style1.UserInfo; import com.asurplus.common.builder.style2.UserInfo2; /** * 建造者模式 */ public class TestMain { public static void main(String[] args) { // 手寫的方式 UserInfo userInfo = UserInfo.builder().name("張三").age(20).build(); System.out.println(userInfo); // 註解的方式 UserInfo2 userInfo2 = UserInfo2.builder().name("李四").age(30).build(); System.out.println(userInfo2); } }
輸出結果
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!
推薦閱讀:
- Java中常用的設計模式之責任鏈模式詳解
- Java中常用的設計模式之單例模式詳解
- Java中常用的設計模式之裝飾器模式詳解
- 使用Lombok @Builder註解導致默認值無效的問題
- Java創建型模式之建造者模式詳解