設計模式之裝飾模式

2022-01-14 04:54:39 字數 3670 閱讀 1148

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 即模板模式 核心思想 產品不變的部分首先實現,將易變的部分抽象出來供子類完成。例如 一雙運動鞋大體製作流程各廠家基本一致,但是各環節實現細節可有些不一樣,不一樣的部分抽象出來讓不同廠家實現。即先有個框架,細節交給不同廠家實現 程式設計例項 趙本山小品中提到的將大象裝...