裝飾器模式小結

來源:互聯網
上載者:User

裝飾器模式主要特徵是用特殊的方式給對象添加功能職責,實際上,這個裝飾器跟我們想象的裝飾一棵聖誕樹差不多,但又有不同之處。

我的理解是,雖然增加了裝飾物,但是這些裝飾物不是直接add上去的,之前一直被這個概念搞混。因為這種模式是建立在一個超類的基礎上的,例如的:Component,所有其他的類都是這個超類的子類,包括具體的組件和裝飾類。因此我們裝飾的對象,與被裝飾的對象,是繼承共同的超類的。這也是被裝飾的對象可以在保持核心結構不變的情況下改變屬性的原因。

也就是說,無論裝飾器類增加了什麼功能,只要重寫了超類的方法,就可以順利回溯被裝飾類的方法。

也就是說,裝飾器相當於把一個物品放在禮品盒裡面,禮品盒就是裝飾類,而整個禮物,還可以實現原來沒有封裝時候的物品的功能。

用Actionscript3.0的代碼實現:

【組件類】即超類

package  {/** * 裝飾模型中的抽象組件 * 抽象類別 * @author 橡樹小屋 */public class Component{public var info:String;public function getInfo():String {return info;}}}

【具體組件類】

package  {/** * ... * @author 橡樹小屋 */public class ConcreteComponent extends Component{public function ConcreteComponent() {info = "具體組件-";}}}

【抽象裝飾類】

package  {public class Decorator extends Component{override public function getInfo():String {return info;}}}

【具體裝飾類】

package  {public class DecConA extends Decorator{private var components:Component;public function DecConA(con:Component) {components = con;}override public function getInfo():String {return components.getInfo() + "裝飾A";}}}
package  {public class DecConB extends Decorator{private var components:Component;public function DecConB(con:Component) {components = con;}override public function getInfo():String {return components.getInfo() + "裝飾B";}}}

【用戶端】

package  {public class main extends MovieClip{public function main() {var obj:Component = new ConcreteComponent();obj = new DecConA(obj);obj = new DecConB(obj);trace(obj.getInfo());}}}

 

參考資料:《Actionscript 3.0 設計模式》

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.