設計模式系列(圖文解析,附帶原始碼) - 生成器
5. 生成器(Builder)
Intent
封裝一個物件的構造過程,並允許按步驟構造。
Class Diagram
Implementation
以下是一個簡易的 StringBuilder 實現,參考了 JDK 1.8 原始碼。
public class AbstractStringBuilder {
protected char[] value;
protected int count;
public AbstractStringBuilder(int capacity) {
count = 0;
value = new char[capacity];
}
public AbstractStringBuilder append(char c) {
ensureCapacityInternal(count + 1);
value[count++] = c;
return this;
}
private void ensureCapacityInternal(int minimumCapacity) {
// overflow-conscious code
if (minimumCapacity - value.length > 0)
expandCapacity(minimumCapacity);
}
void expandCapacity(int minimumCapacity) {
int newCapacity = value.length * 2 + 2;
if (newCapacity - minimumCapacity < 0)
newCapacity = minimumCapacity;
if (newCapacity < 0) {
if (minimumCapacity < 0) // overflow
throw new OutOfMemoryError();
newCapacity = Integer.MAX_VALUE;
}
value = Arrays.copyOf(value, newCapacity);
}
}
public class StringBuilder extends AbstractStringBuilder {
public StringBuilder() {
super(16);
}
@Override
public String toString() {
// Create a copy, don't share the array
return new String(value, 0, count);
}
}
public class Client {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
final int count = 26;
for (int i = 0; i < count; i++) {
sb.append((char) ('a' + i));
}
System.out.println(sb.toString());
}
}
abcdefghijklmnopqrstuvwxyz
JDK
相關文章
- 設計模式系列(圖文解析,附帶原始碼) - 命令設計模式原始碼
- 設計模式系列(圖文解析,附帶原始碼) - 模板方法設計模式原始碼
- 設計模式系列(圖文解析,附帶原始碼)- 空物件設計模式原始碼物件
- 設計模式系列(圖文解析,附帶原始碼) - 介面卡設計模式原始碼
- 【趣味設計模式系列】之【代理模式3--Cglib動態代理原始碼解析】設計模式CGLib原始碼
- 【趣味設計模式系列】之【代理模式2--JDK動態代理原始碼解析】設計模式JDK原始碼
- Gson原始碼解析和它的設計模式原始碼設計模式
- 設計模式(十)——組合模式(HashMap原始碼解析)設計模式HashMap原始碼
- JavaScript設計模式系列二之建造者模式(附案例原始碼)JavaScript設計模式原始碼
- 設計模式之釋出訂閱模式(5) Spring Events原始碼解析設計模式Spring原始碼
- 一文掌握介面卡設計模式,UML圖解原始碼簡單易懂設計模式圖解原始碼
- 設計模式-生成器模式Builder設計模式UI
- 設計模式(三):生成器模式設計模式
- 【設計模式】- 生成器模式(Builder)設計模式UI
- Android原始碼設計模式-模板模式Android原始碼設計模式
- 軟體設計模式白話文系列(十四)策略模式設計模式
- Dubbo架構設計與原始碼解析(三)責任鏈模式架構原始碼模式
- Android原始碼設計模式-中介者模式Android原始碼設計模式
- Handler系列原始碼解析原始碼
- 一文帶你摸清設計模式之單例模式!設計模式單例
- 【圖解設計模式系列】The Command Pattern: 命令列模式圖解設計模式命令列
- 圖文詳解23種設計模式設計模式
- 【趣味設計模式系列】之【代理模式4--ASM框架解析】設計模式ASM框架
- 設計模式十: 生成器模式(Builder Pattern)設計模式UI
- 原始碼中的設計模式--工廠模式原始碼設計模式
- 原始碼中的設計模式--模板方法模式原始碼設計模式
- 設計模式(十四)——模板模式(SpringIOC原始碼分析)設計模式Spring原始碼
- 【圖解設計模式系列】23句話總結23種設計模式圖解設計模式
- AFNetworking原始碼解析系列(1)原始碼
- AFNetworking原始碼解析系列(2)原始碼
- 設計模式系列設計模式
- Android 原始碼設計模式解析與實戰 讀書筆記 5 工廠方法模式Android原始碼設計模式筆記
- 原始碼中的設計模式--裝飾器模式原始碼設計模式
- HashMap原始碼解析和設計解讀HashMap原始碼
- 【圖解設計模式系列】The Abstract Factory Pattern: 抽象工廠模式圖解設計模式抽象
- 從設計模式角度看OkHttp原始碼設計模式HTTP原始碼
- Spring5原始碼解析系列一——IoC容器核心類圖Spring原始碼
- TiKV 原始碼解析系列 ——Placement Driver原始碼