簡介裝飾模式
裝飾模式以對客戶端【透明】的方式【擴充套件】物件的功能,客戶端並不會覺得物件在裝飾前和裝飾後有什麼不同
,是繼承關係的乙個替代方案。
若只為增加功能而使用繼承,當基類較多時會導致繼承體系越來越臃腫,
裝飾模式可以在不創造更多子類的情況下,將物件的功能加以擴充套件。
裝飾物件和真實物件有相同的介面,這樣客戶端物件就可以以和真實物件相同的方式和裝飾物件互動。
裝飾物件包含乙個真實物件的引用
,它接收所有來自客戶端的請求,並把這些請求**給真實的物件,並
在**這些請求之前或之後
可以附加一些功能。
角色
優點
演示publicinte***ceiwork
publicclasspeople implementsiwork
}
classpeoplev2 extendspeople
}
classpeoplev3 extendspeople
}
publicclassrobot implementsiwork
}
classrobotv2 extendsrobot
}
classrobotv3 extendsrobot
}
/** * 動態地給乙個物件新增一些額外的職責。就增加功能來說,decorator模式相比生成子類更為靈活。
*/publicclassdecorator implementsiwork
@override
public
void work()
}
classdecoratorv2 implementsiwork
@override
public
void work()
}
publicclasstest
}
來自為知筆記(wiz)
閉包和裝飾模式
閉包 在乙個外函式中定義了乙個內函式,內函式裡運用了外函式的臨時變數,並且外函式的返回值是內函式的引用。這樣就構成了乙個閉包。一般情況下,在我們認知當中,如果乙個函式結束,函式的內部所有東西都會釋放掉,還給記憶體,區域性變數都會消失。但是閉包是一種特殊情況,如果外函式在結束的時候發現有自己的臨時變數...
裝飾器模式在mybatis cache包中的應用
裝飾器模式主要解決的是直接繼承下因功能的不斷橫向擴充套件導致子類膨脹的問題,就功能實現來說,使用裝飾器模式比直接繼承顯得更加靈活,同時不需要考慮子類的維護。上圖為裝飾器模式的組成,可以看出,其主要包含如下部分 下圖即為mybatis的cache包下的裝飾器實現結構 cache介面定義了快取的一系列操...
設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...