1、類圖
2、建立專案
3、 visualcomponent:抽象介面構件類,充當抽象構件類
為了突出與模式相關的核心**,咋基本例項中對空間**進行了簡化。
namespace decoratorsample
///
/// 抽象構件類
///
abstract class visualcomponent
///
/// 抽象方法:顯示控制項
///
public abstract void display();
4、 window:窗體類,充當具體構件類
using system;
namespace decoratorsample
///
/// 具體構件類:windows,該類實現構建類的基本功能
///
class window : visualcomponent
public override void display()
console.writeline("窗體構件——顯示窗體!");
5、 textbox:文字框類,充當具體構件類。
using system;
namespace decoratorsample
///
/// 具體構件類:textbox,該類實現構建類的基本功能
///
class textbox : visualcomponent
public override void display()
console.writeline("顯示文字框!");
6、 listbox:列表框類,充當具體構件類
using system;
namespace decoratorsample
///
/// 具體構件類:listbox,該類實現構建類的基本功能
///
class listbox : visualcomponent
public override void display()
console.writeline("顯示列表框!");
7、 componentdecorator:構件裝飾類,充當抽象裝飾類。
namespace decoratorsample
///
/// 抽象裝飾類,該類為抽象構件類的子類,負責實現構件的複雜功能
///
class componentdecorator : visualcomponent
private visualcomponent component; //維持對抽象構件型別物件的引用
///
/// 注入抽象構件型別的物件,即注入具體構件類,此建構函式非常重要
///
///
public componentdecorator(visualcomponent component)
this.component = component;
///
/// 實現注入構件的基本功能
///
public override void display()
component.display();//呼叫注入的具體構件的方法
8、 scrollbardecorator:滾動條裝飾類,充當具體裝飾類
using system;
namespace decoratorsample
///
/// 滾動條裝飾類,該類為具體裝飾類
///
class scrollbardecorator : componentdecorator
public scrollbardecorator(visualcomponent component)
: base(component)
///
/// 再次重寫基類的基本方式,實現裝飾構件的裝飾:即實現構件的基本方法,也實現新增加的方法
///
public override void display()
this.setscrollbar();
base.display();
///
/// 設定滾動條,此方法為裝飾的增加的新方法
///
public void setscrollbar()
console.writeline("為構件增加滾動條!");
9、 blackborderdecorator:黑色邊框裝飾類,充當具體裝飾類
using system;
namespace decoratorsample
///
/// 帶黑色邊框的裝飾類,該類為抽象構件類的子類
///
class blackborderdecorator : componentdecorator
public blackborderdecorator(visualcomponent component)
: base(component)
///
/// 再次重寫基類的基本方式,實現裝飾構件的裝飾:即實現構件的基本方法,也實現新增加的方法
///
public override void display()
this.setblackborder();
base.display();
///
/// 新增加的方法,實現黑色邊框
///
public void setblackborder()
console.writeline("為構件增加黑色邊框!");
10、 program:客戶端測試類
using system;
namespace decoratorsample
class program
static void main(string args)
//以下演示透明裝飾的使用
visualcomponent component; //抽象構件
visualcomponent componentscrollbar; //帶滾動條的裝飾構件
visualcomponent componentblackborder; //帶黑色邊框的裝飾構件
component = new window(); //定義具體構件
console.writeline("準備構件" + component.tostring());
componentscrollbar = new scrollbardecorator(component); //進行滾動條裝飾,引數為需要裝飾的構件
componentblackborder = new blackborderdecorator(componentscrollbar); //將裝飾了一次之後的物件繼續注入到另乙個裝飾類中,進行第二次裝飾
componentblackborder.display();
console.read();
11、 結果及分析
設計模式之裝飾設計模式
1.目的 動態擴充套件類的行為 開閉原則 對擴充套件開放,對修改關閉 2.要點 裝飾類和被裝飾類都實現同乙個介面或者繼承同乙個類 3.具體實現 被裝飾元件介面 被裝飾元件實現類實現 抽象類構建被裝飾元件實現被裝飾元件介面 裝飾類繼承抽象類 裝飾類 重寫抽象類方法 裝飾 4.例項 被裝飾類介面 pub...
設計模式之裝飾模式
有時如果需要對某乙個類增加乙個功能,可以使用繼承來實現。但是如果想要只是對某乙個物件來增加一項功能,則可能會用到裝飾模式。裝飾模式的主要作用是動態的給某乙個物件新增某些功能。如果此時使用繼承來新增功能時,會產生大量的子類,導致難以維護。裝飾模式的簡要類圖如下 其中 component為待增加功能 即...
設計模式之裝飾模式
template pattern 即模板模式 核心思想 產品不變的部分首先實現,將易變的部分抽象出來供子類完成。例如 一雙運動鞋大體製作流程各廠家基本一致,但是各環節實現細節可有些不一樣,不一樣的部分抽象出來讓不同廠家實現。即先有個框架,細節交給不同廠家實現 程式設計例項 趙本山小品中提到的將大象裝...