遇到多個構造器引數時考慮使用構建器(Effective Java )
當一個複雜的物件的構造有許多可選引數的時候,就應該考慮使用構建器(Builder設計模式)來構建物件。
一般來說, Builder常常作為實際產品的靜態內部類來實現(提高內聚性).
故而Product,Director, Builder常常是在一個類檔案中, 例如本例中的Car.java.
public class Car {
// 這邊就隨便定義幾個屬性
private boolean addModel;
private boolean addWheel;
private boolean addEngine;
private boolean addSeat;
public Car(Builder builder) {
this.addModel = builder.addModel;
this.addWheel = builder.addWheel;
this.addEngine = builder.addEngine;
this.addSeat = builder.addSeat;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder("A car has:");
if (this.addModel) {
builder.append(">>車身>>");
}
if (this.addWheel) {
builder.append(">>輪子>>");
}
if (this.addEngine) {
builder.append(">>發動機>>");
}
if (this.addSeat) {
builder.append(">>座椅>>");
}
return builder.toString();
}
public static class Builder {
private boolean addModel;
private boolean addWheel;
private boolean addEngine;
private boolean addSeat;
public Builder() {
}
public Builder withModel() {
this.addModel = true;
return this;
}
public Builder withWheel() {
this.addWheel = true;
return this;
}
public Builder withEngine() {
this.addEngine = true;
return this;
}
public Builder withSeat() {
this.addSeat = true;
return this;
}
public Car build() {
return new Car(this);
}
}
public static void main(String[] args) {
// build car
Car carOne = new Car.Builder().withModel().withModel().withEngine().withSeat().withWheel().build();
System.out.println("Car1 has: " + carOne);
//Car1 has: A car has:>>車身>>>>輪子>>>>發動機>>>>座椅>>
Car caeTwo = new Car.Builder().withModel().withSeat().withWheel().build();
System.out.println("Car2 has: " + caeTwo);
//Car2 has: A car has:>>車身>>>>輪子>>>>座椅>>
}
相關文章
- (譯)Effective Kotlin系列之遇到多個構造器引數要考慮使用構建器(二)Kotlin
- (譯)Effective Kotlin系列之考慮使用靜態工廠方法替代構造器(一)Kotlin
- [翻譯]Effective Java in Kotlin:1. 考慮用靜態工廠方法而不是構造器JavaKotlin
- Effective Java - 靜態方法與構造器Java
- 【lombok】@NoArgsConstructor/@RequirArgsConstructor/@AllArgsConstructor - 生成無參構造器,指定引數構造器或包含所有引數的構造器LombokStructUI
- Effective Java - 構造器私有、列舉和單例Java單例
- java構造器Java
- Java--構造器和構造方法Java構造方法
- Java構造器 小白版Java
- C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造C++函式
- 什麼是 Java 構造器?Java
- 構造器
- java——繼承遇到構造方法Java繼承構造方法
- [譯] 使用 React 和 ImmutableJS 構建一個拖放佈局構建器ReactJS
- java學習之深入構造器Java
- 日曆(設計構造器與預設構造器)
- 訪問器於構造器的高階使用
- 14.構造器
- 使用管道流實現Java 8階段構建器Java
- 當未指定且存在多個構造器,例項化物件時Spring如何選擇?物件Spring
- 使用openSSL構造一個支援https的nodejs伺服器HTTPNodeJS伺服器
- 一文了解 Java 中的構造器Java
- 使用 LangChain 構建聊天機器人LangChain機器人
- laravel 使用schema構建器,新增構建表的列型別Laravel型別
- Java 8中實現構建器模式Java模式
- 淺談瀏覽器實時構建瀏覽器
- iOS提供指定構造器iOS
- Java基礎03 構造器與方法過載Java
- 使用樹莓派構建一個嬰兒監視器樹莓派
- Golang:使用 httprouter 構建 API 伺服器GolangHTTPAPI伺服器
- 規劃企業新IT架構時必須考慮要素架構
- EXTJS 建構函式帶引數JS函式
- Jenkins 2.32.3引數化構建maven專案-java專案JenkinsMavenJava
- 學習Jenkins持續整合(三)Jenkins專案構建觸發器、引數化構建及郵件傳送Jenkins觸發器
- 使用 Laravel Eloquent 構造器讓模型更簡潔Laravel模型
- Mybatis-Plus - 條件構造器 QueryWrapper 的使用MyBatisAPP
- 物件導向和構造器物件
- 使用LangGraph構建多Agent系統架構!架構
- 用 Go 構建一個 SQL 解析器GoSQL