代理模式在於對被代理對象進行控制。 比如
Collections.unmodifiableList 增加,刪除等操作會直接拋出錯誤。
Collections.synchronizedMap 所有的操作進行加鎖,從而變得線程安全。
代理模式中代理者和被代理者有着相同的行爲,一般兩者實現相同的接口。
裝飾器模式在於功能增強。 比如 I/O 集合裏面的
ByteArrayOutputStream和DataOutputStream
ByteArrayOutputStream 提供基礎的字節存儲功能。
public static void main(String[] args) throws Exception{ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byteArrayOutputStream.write(100); byteArrayOutputStream.write(new byte[]{1,2,3}); }
DataOutputStream 則提供更高層次的支持
比如writeLong ,但最終還是調用了out的基礎方法。
public final void writeLong(long v) throws IOException { writeBuffer[0] = (byte)(v >>> 56); writeBuffer[1] = (byte)(v >>> 48); writeBuffer[2] = (byte)(v >>> 40); writeBuffer[3] = (byte)(v >>> 32); writeBuffer[4] = (byte)(v >>> 24); writeBuffer[5] = (byte)(v >>> 16); writeBuffer[6] = (byte)(v >>> 8); writeBuffer[7] = (byte)(v >>> 0); out.write(writeBuffer, 0, 8); incCount(8); }