设计模式之装饰模式
2018-06-18 01:30:28来源:未知 阅读 ()
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、 结果及分析
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++之观察者模式 2020-03-19
- c++之模板模式 2020-03-12
- C++之策略模式 2020-03-12
- CPP 设计模式学习 2020-01-02
- 《大话设计模式》之简单工厂模式 2019-11-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash