代理模式
Proxy(代理)—對象結構型模式定義:給某一個對象提供一個代理對象,并由代理對象控制原有對象的引用。
代理模式的核心思想是:創建一個代理對象,代理對象在調用目標方法時,可以插入額外的邏輯。
?
注意區分裝飾者模式和代理模式的區別。在代理模式中,ComponentImpl 和 Proxy 類都實現了 IComponent 接口,Proxy 對象中雖然也維護著一個 ComponentImpl 對象,但一般情況下它是代理類自己初始化的,不像裝飾者模式是通過 set 進去的,同時在接口方法即 operation() 中代理對象會限制外界對被代理對象的訪問,而裝飾者模式是裝飾者給被裝飾者添加額外的行為。
Spring AOP底層,就是動態代理模式的實現。
?
適用場景分析:
1.需要修改或屏蔽某一個或若干個類的部分功能,復用另外一部分功能。
2.需要攔截一批類中的某些方法,在方法的前后插入一些一致的操作,如Spring的AOP。
裝飾者模式
Decorator(裝飾)—對象結構型模式定義:動態地給一個對象添加一些額外的功能。就增加功能來說,裝飾模式相比生成子類更為靈活。
ComponentImpl 和 Decorator 類都實現了 IComponent 接口,不同的是 ComponentImpl 提供了具體實現,而 Decorator 是先聚合 ComponentImpl 接著在自己的實現方法即 operation() 方法中做些處理(即裝飾)后再調用 ComponentImpl 對象的具體實現。
io中inputStream在裝飾模式的用法 BufferedInputStream
設計原則:
? 遵循迪米特(最少知識原則)
? 單一職責
? 開閉原則
? 破壞里氏替換原則
場景分析:
1.需要動態地給一個對象增加功能,這些功能可以動態地撤銷。
2.IO流包裝、數據源包裝。