遇到多個構造器引數時考慮使用構建器(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:>>車身>>>>輪子>>>>座椅>>
}
相關文章
- 2、遇到多個構造引數的時候需要考慮使用構建器(effective java)Java
- effective java 第2條:遇到多個構造器引數時要考慮用構造器Java
- (譯)Effective Kotlin系列之遇到多個構造器引數要考慮使用構建器(二)Kotlin
- (譯)Effective Kotlin系列之考慮使用靜態工廠方法替代構造器(一)Kotlin
- Effective Java - 靜態方法與構造器Java
- [翻譯]Effective Java in Kotlin:1. 考慮用靜態工廠方法而不是構造器JavaKotlin
- 構建一個 Javascript 多維陣列構造器JavaScript陣列
- Effective Java - 構造器私有、列舉和單例Java單例
- 【lombok】@NoArgsConstructor/@RequirArgsConstructor/@AllArgsConstructor - 生成無參構造器,指定引數構造器或包含所有引數的構造器LombokStructUI
- java構造器Java
- Java--構造器和構造方法Java構造方法
- Java構造器 小白版Java
- Java構建器(Builder)JavaUI
- 構造器
- C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造C++函式
- 什麼是 Java 構造器?Java
- java——繼承遇到構造方法Java繼承構造方法
- 系統架構時考慮效能要素架構
- java學習之深入構造器Java
- eoLinker介面測試之API引數(表示式)構造器API
- 網站在架構時要考慮的事情網站架構
- Java採用內部構造器Builder模式進行對類進行構建JavaUI模式
- [譯] 使用 React 和 ImmutableJS 構建一個拖放佈局構建器ReactJS
- C#例項構造器,型別構造器 -筆記型別筆記
- 一文了解 Java 中的構造器Java
- 使用管道流實現Java 8階段構建器Java
- 淺談瀏覽器實時構建瀏覽器
- 當未指定且存在多個構造器,例項化物件時Spring如何選擇?物件Spring
- iOS提供指定構造器iOS
- Java入門:深度理解JAVA本身的構造器(轉)Java
- 使用 LangChain 構建聊天機器人LangChain機器人
- laravel 使用schema構建器,新增構建表的列型別Laravel型別
- Java 8中實現構建器模式Java模式
- Java基礎03 構造器與方法過載Java
- 使用樹莓派構建一個嬰兒監視器樹莓派
- 規劃企業新IT架構時必須考慮要素架構
- 物件導向和構造器物件
- Golang:使用 httprouter 構建 API 伺服器GolangHTTPAPI伺服器