關於Decorator模式

2021-09-05 19:55:19 字數 758 閱讀 2174

關於decorator模式

decorator用於動態地給物件新增一些額外的職責,注意:此處是給物件,而不是給類,這正式該模式靈活的地方。你可以給乙個物件巢狀乙個或人乙個多個decorator。

下面我們主要要看一下decorator和strategy的區別。

decorator模式僅從外部改變組建,因此元件無需對它的裝飾有任何了解,也就是說,這些裝飾對元件來說是透明的,元件對裝飾一無所知,如圖1所示。

在strategy模式中,component組建本身知道可能進行哪些擴充,因此它必須引用並維護相應的策略。如圖2所示。

基於strategy模式的方法可能需要修改component元件以適應新的擴充。另一方面,乙個策略可以有自己特定的介面,而裝飾的介面則必須與元件的介面一致。

在decorator中,保持介面的簡單性非常重要。decorator中的component應集中於定義介面而不是儲存資料,對資料的表示應該延遲到子類中。否則component類會變得過於複雜和龐大,因而難以大量使用。賦予component太多的功能也使用具體的子類有一些他們並不需要的功能的可能性大大增加。

decorator的靈活性使得他可以用於定義那些可以撤銷的職責。因為職責都是動態的,新增和撤銷都一樣的方便。

關於Decorator模式我的理解

justin寫了一篇關於decorator模式很好的文章來杯咖啡 裝飾者模式 decorator 詳細地闡述了這一模式,並茂非常爽心悅目.關於他舉的 net框架裡的應用 tooltip一例個人卻有著不同的意見.意見的最大問題可能在於 對於decorator的定義上.體現了動態新增功能的就是decor...

設計模式 decorator模式

裝飾者模式體現了 敏捷開發思想中的 對類要 開放擴充套件,關閉修改.例子 乙個person主類 若干裝飾品類 紅衣服,藍衣服,藍鞋子,紅鞋子 測試 new乙個person 給他穿上紅衣服藍鞋子 code person介面 public inte ce ipersonperson類 package c...

設計模式 decorator模式

兩點 目的 在不改變被裝飾類功能的前提下增加新功能 特點 繼承是子類和父類強耦合,橋接是低耦合 例子 class print 抽象介面 virtual int getcolumns virtual int getrows virtual string getrowcontent int row el...