**1、使用靜態(tài)方法代替構(gòu)造器**
```java
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
```
優(yōu)勢(shì):
* 靜態(tài)工廠方法的名稱(chēng)可以明確描述正在返回的對(duì)象
* 靜態(tài)工廠方法可以返回已經(jīng)緩存的對(duì)象,而不是像構(gòu)造器一樣每次返回新的對(duì)象
* 靜態(tài)工廠方法可以返回原返回類(lèi)型的任何子類(lèi)型的對(duì)象
**2、存在多個(gè)構(gòu)造器參數(shù)時(shí)推薦使用Builder模式**
```java
// Phone.java
public class Phone {
private final String mBrand;
private final int mColor;
private final String mMemory;
private final String mCPU;
private Phone(Builder builder) {
mBrand = builder.mBrand;
mColor = builder.mColor;
mMemory = builder.mMemory;
mCPU = builder.mCPU;
}
public static class Builder {
/**
* 必需參數(shù)
*/
private final String mBrand;
private final int mColor;
/**
* 可選參數(shù)
*/
private String mMemory = "6g";
private String mCPU = "835";
public Builder(String brand, int color) {
mBrand = brand;
mColor = color;
}
public Builder memory(String memory) {
mMemory = memory;
return this;
}
public Builder cpu(String cpu) {
mCPU = cpu;
return this;
}
public Phone build() {
return new Phone(this);
}
}
}
```
使用Builder模式創(chuàng)建對(duì)象:
```java
// MakePhone.java
Phone mate20 = new Phone.Builder("Huawei", Color.BLACK)
.cpu("980")
.memory("6g")
.build();
```
Builder類(lèi)最終的build方法中,會(huì)從Builder對(duì)象中獲取相應(yīng)信息生成目標(biāo)類(lèi)的對(duì)象。
> 對(duì)于有多個(gè)參數(shù)的構(gòu)造器來(lái)說(shuō)
> * 重疊構(gòu)造器模式線程安全,但不易編寫(xiě)以及閱讀;
> * JavaBean模式易編寫(xiě)及閱讀,但是非線程安全;
> * Builder模式綜合以上兩種模式的優(yōu)點(diǎn),既易編寫(xiě)及閱讀,也是線程安全。
**3、使類(lèi)和成員的可訪問(wèn)性最小化**
設(shè)計(jì)良好的模塊會(huì)隱藏所有的實(shí)現(xiàn)細(xì)節(jié),把它的API與實(shí)現(xiàn)清晰隔離開(kāi)來(lái),模塊之間只通過(guò)API進(jìn)行通信,一個(gè)模塊不需要知道其他模塊內(nèi)部的工作情況,這稱(chēng)為信息隱藏或封裝。
* 公有類(lèi)的實(shí)例域決不能是公有的
- 導(dǎo)讀
- Java知識(shí)
- Java基本程序設(shè)計(jì)結(jié)構(gòu)
- 【基礎(chǔ)知識(shí)】Java基礎(chǔ)
- 【源碼分析】Okio
- 【源碼分析】深入理解i++和++i
- 【專(zhuān)題分析】JVM與GC
- 【面試清單】Java基本程序設(shè)計(jì)結(jié)構(gòu)
- 對(duì)象與類(lèi)
- 【基礎(chǔ)知識(shí)】對(duì)象與類(lèi)
- 【專(zhuān)題分析】Java類(lèi)加載過(guò)程
- 【面試清單】對(duì)象與類(lèi)
- 泛型
- 【基礎(chǔ)知識(shí)】泛型
- 【面試清單】泛型
- 集合
- 【基礎(chǔ)知識(shí)】集合
- 【源碼分析】SparseArray
- 【面試清單】集合
- 多線程
- 【基礎(chǔ)知識(shí)】多線程
- 【源碼分析】ThreadPoolExecutor源碼分析
- 【專(zhuān)題分析】volatile關(guān)鍵字
- 【面試清單】多線程
- Java新特性
- 【專(zhuān)題分析】Lambda表達(dá)式
- 【專(zhuān)題分析】注解
- 【面試清單】Java新特性
- Effective Java筆記
- Android知識(shí)
- Activity
- 【基礎(chǔ)知識(shí)】Activity
- 【專(zhuān)題分析】運(yùn)行時(shí)權(quán)限
- 【專(zhuān)題分析】使用Intent打開(kāi)三方應(yīng)用
- 【源碼分析】Activity的工作過(guò)程
- 【面試清單】Activity
- 架構(gòu)組件
- 【專(zhuān)題分析】MVC、MVP與MVVM
- 【專(zhuān)題分析】數(shù)據(jù)綁定
- 【面試清單】架構(gòu)組件
- 界面
- 【專(zhuān)題分析】自定義View
- 【專(zhuān)題分析】ImageView的ScaleType屬性
- 【專(zhuān)題分析】ConstraintLayout 使用
- 【專(zhuān)題分析】搞懂點(diǎn)九圖
- 【專(zhuān)題分析】Adapter
- 【源碼分析】LayoutInflater
- 【源碼分析】ViewStub
- 【源碼分析】View三大流程
- 【源碼分析】觸摸事件分發(fā)機(jī)制
- 【源碼分析】按鍵事件分發(fā)機(jī)制
- 【源碼分析】Android窗口機(jī)制
- 【面試清單】界面
- 動(dòng)畫(huà)和過(guò)渡
- 【基礎(chǔ)知識(shí)】動(dòng)畫(huà)和過(guò)渡
- 【面試清單】動(dòng)畫(huà)和過(guò)渡
- 圖片和圖形
- 【專(zhuān)題分析】圖片加載
- 【面試清單】圖片和圖形
- 后臺(tái)任務(wù)
- 應(yīng)用數(shù)據(jù)和文件
- 基于網(wǎng)絡(luò)的內(nèi)容
- 多線程與多進(jìn)程
- 【基礎(chǔ)知識(shí)】多線程與多進(jìn)程
- 【源碼分析】Handler
- 【源碼分析】AsyncTask
- 【專(zhuān)題分析】Service
- 【源碼分析】Parcelable
- 【專(zhuān)題分析】Binder
- 【源碼分析】Messenger
- 【面試清單】多線程與多進(jìn)程
- 應(yīng)用優(yōu)化
- 【專(zhuān)題分析】布局優(yōu)化
- 【專(zhuān)題分析】繪制優(yōu)化
- 【專(zhuān)題分析】?jī)?nèi)存優(yōu)化
- 【專(zhuān)題分析】啟動(dòng)優(yōu)化
- 【專(zhuān)題分析】電池優(yōu)化
- 【專(zhuān)題分析】包大小優(yōu)化
- 【面試清單】應(yīng)用優(yōu)化
- Android新特性
- 【專(zhuān)題分析】狀態(tài)欄、ActionBar和導(dǎo)航欄
- 【專(zhuān)題分析】應(yīng)用圖標(biāo)、通知欄適配
- 【專(zhuān)題分析】Android新版本重要變更
- 【專(zhuān)題分析】唯一標(biāo)識(shí)符的最佳做法
- 開(kāi)源庫(kù)源碼分析
- 【源碼分析】BaseRecyclerViewAdapterHelper
- 【源碼分析】ButterKnife
- 【源碼分析】Dagger2
- 【源碼分析】EventBus3(一)
- 【源碼分析】EventBus3(二)
- 【源碼分析】Glide
- 【源碼分析】OkHttp
- 【源碼分析】Retrofit
- 其他知識(shí)
- Flutter
- 原生開(kāi)發(fā)與跨平臺(tái)開(kāi)發(fā)
- 整體歸納
- 狀態(tài)及狀態(tài)管理
- 零碎知識(shí)點(diǎn)
- 添加Flutter到現(xiàn)有應(yīng)用
- Git知識(shí)
- Git命令
- .gitignore文件
- 設(shè)計(jì)模式
- 創(chuàng)建型模式
- 結(jié)構(gòu)型模式
- 行為型模式
- RxJava
- 基礎(chǔ)
- Linux知識(shí)
- 環(huán)境變量
- Linux命令
- ADB命令
- 算法
- 常見(jiàn)數(shù)據(jù)結(jié)構(gòu)及實(shí)現(xiàn)
- 數(shù)組
- 排序算法
- 鏈表
- 二叉樹(shù)
- 棧和隊(duì)列
- 算法時(shí)間復(fù)雜度
- 常見(jiàn)算法思想
- 其他技術(shù)
- 正則表達(dá)式
- 編碼格式
- HTTP與HTTPS
- 【面試清單】其他知識(shí)
- 開(kāi)發(fā)歸納
- Android零碎問(wèn)題
- 其他零碎問(wèn)題
- 開(kāi)發(fā)思路
