1、類圖
2、創建項目
…………………………
3、 VisualComponent:抽象界面構件類,充當抽象構件類
為了突出與模式相關的核心代碼,咋基本實例中對空間代碼進行了簡化。
namespace DecoratorSample
{
/// <summary>
/// 抽象構件類
/// </summary>
abstract class VisualComponent
{
/// <summary>
/// 抽象方法:顯示控件
/// </summary>
public abstract void Display();
}
}
4、 Window:窗體類,充當具體構件類
using System;
namespace DecoratorSample
{
/// <summary>
/// 具體構件類:Windows,該類實現構建類的基本功能
/// </summary>
class Window : VisualComponent
{
public override void Display()
{
Console.WriteLine("窗體構件——顯示窗體!");
}
}
}
5、 TextBox:文本框類,充當具體構件類。
using System;
namespace DecoratorSample
{
/// <summary>
/// 具體構件類:TextBox,該類實現構建類的基本功能
/// </summary>
class TextBox : VisualComponent
{
public override void Display()
{
Console.WriteLine("顯示文本框!");
}
}
}
6、 ListBox:列表框類,充當具體構件類
using System;
namespace DecoratorSample
{
/// <summary>
/// 具體構件類:ListBox,該類實現構建類的基本功能
/// </summary>
class ListBox : VisualComponent
{
public override void Display()
{
Console.WriteLine("顯示列表框!");
}
}
}
7、 ComponentDecorator:構件裝飾類,充當抽象裝飾類。
namespace DecoratorSample
{
/// <summary>
/// 抽象裝飾類,該類為抽象構件類的子類,負責實現構件的復雜功能
/// </summary>
class ComponentDecorator : VisualComponent
{
private VisualComponent component; //維持對抽象構件類型對象的引用
/// <summary>
/// 注入抽象構件類型的對象,即注入具體構件類,此構造函數非常重要
/// </summary>
/// <param name="component"></param>
public ComponentDecorator(VisualComponent component)
{
this.component = component;
}
/// <summary>
/// 實現注入構件的基本功能
/// </summary>
public override void Display()
{
component.Display();//調用注入的具體構件的方法
}
}
}
8、 ScrollBarDecorator:滾動條裝飾類,充當具體裝飾類
using System;
namespace DecoratorSample
{
/// <summary>
/// 滾動條裝飾類,該類為具體裝飾類
/// </summary>
class ScrollBarDecorator : ComponentDecorator
{
public ScrollBarDecorator(VisualComponent component)
: base(component)
{
}
/// <summary>
/// 再次重寫基類的基本方式,實現裝飾構件的裝飾:即實現構件的基本方法,也實現新增加的方法
/// </summary>
public override void Display()
{
this.SetScrollBar();
base.Display();
}
/// <summary>
/// 設置滾動條,此方法為裝飾的增加的新方法
/// </summary>
public void SetScrollBar()
{
Console.WriteLine("為構件增加滾動條!");
}
}
}
9、 BlackBorderDecorator:黑色邊框裝飾類,充當具體裝飾類
using System;
namespace DecoratorSample
{
/// <summary>
/// 帶黑色邊框的裝飾類,該類為抽象構件類的子類
/// </summary>
class BlackBorderDecorator : ComponentDecorator
{
public BlackBorderDecorator(VisualComponent component)
: base(component)
{
}
/// <summary>
/// 再次重寫基類的基本方式,實現裝飾構件的裝飾:即實現構件的基本方法,也實現新增加的方法
/// </summary>
public override void Display()
{
this.SetBlackBorder();
base.Display();
}
/// <summary>
/// 新增加的方法,實現黑色邊框
/// </summary>
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、 結果及分析