裝飾模式

定義

        動態的給一個對象添加一些額外的功能。就添加功能來說,裝飾模式比繼承更靈活。

關鍵詞

        靈活——裝飾模式比繼承要靈活得多。

        動態、透明——外界不需要區分當前使用的是裝飾者還是被裝飾者。因爲兩者具有相同的接口。

        撤銷——可以很方便地撤銷對某個對象的裝飾操作。

使用場景

        1,在不影響其他對象的情況下,爲某一個單獨的對象添加功能。不能使用繼承,因爲繼承對所有的對象都產生作用。

        2,處理可以撤銷的裝飾。只需要不使用裝飾類即可。

        3,對某些無法繼承的類的對象添加額外操作。無法使用繼承的情況一般有兩種:第一類被final修飾;第二額外的功能太多,不可能爲每一種功能的組合都提供一個類,這會導致類的臃腫與膨脹。

比較

與繼承的比較

        參見使用場景。

與策略模式的比較

        1,裝飾模式影響對象的外表,而策略類影響的是對象的內在。裝飾類並不影響當前對象的核心邏輯,它只是在核心邏輯的前後添加一些額外的操作。但在策略時,是將對象的某一部分具體邏輯封裝給單獨的策略類,改變策略類就影響了對象內部的某些邏輯的實現方式。

        2,裝飾類與被裝飾類必須具有相同的父類,而策略類可以有自己獨立的接口。前者是裝飾模式透明性的要求,後者是保證所有策略類能夠相互替換的要求。

        3,當對象原來就很複雜時,使用策略模式比裝飾模式更適合

與代理模式的比較

        1,代理類與被代理類不一定具有相同的父類,裝飾模式卻要求一定要具有。

        2,代理類是控制對被代理類的訪問,有可能並不能訪問到被代理類中;而裝飾模式卻是一定可以訪問到被裝飾的對象。

        3,代理模式偏重於控制,而裝飾偏重於添加額外的功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章