程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 設計模式之裝飾模式,設計模式裝飾

設計模式之裝飾模式,設計模式裝飾

編輯:關於.NET

設計模式之裝飾模式,設計模式裝飾


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、 結果及分析

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved