C#设计模式—装饰模式

一、装饰模式定义

    动态地给一个对象增加一些额外的职责,就扩展功能而言,装饰模式提供了一种比使用子类更加灵活的替代方案。

    说明:装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。

    在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩展原有类的功能。

二、装饰模式的结构

1)抽象构件(Component)

    是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法。

2)具体构件(ConcreteComponent)

    是抽象构件类的子类,用于定义具体的构件对象,实现了抽象构件中声明的方法,装饰类可以给它增加额外的方法。

3)  抽象装饰类(Decorator)

    是抽象构件类的子类,用于给具体构件增加额外的方法,但是具体方法常在其子类中实现。

4)  具体装饰类(ConcreteDecorator)

    是抽象装饰类的子类,负责向构件中添加新的方法。

三、装饰模式应用实例

    开发一套图形界面构件库Visual Component,库中提供大量的基本构件,如窗体,文本框,列表框等。并且使得构件库具有可扩展性。

    使用装饰模式来设计图形界面构件库。

    其中,VisualComponent充当抽象构件类,其子类Window、TextBox、ListBox充当具体构件类;VisualComponent的另一子类ComponentDecorator充当抽象装饰类,它的子类ScrollBarDecorator和BlackBorderDecorator充当具体装饰类。

    实例代码下载链接:http://download.csdn.net/detail/qq_30507287/9553473

四、透明装饰模式和半透明装饰模式

    两者主要区别在于对客户端代码中,使用抽象构件类型定义对象的差异。也就是在定义对象时要将对象定义为抽象构件。

    透明装饰模式定义对象(见应用实例):

    Component component1,component2;

    半透明装饰模式定义对象:

    Component component;

    ComponentDecorator component2;

五、装饰模式的优点

    1)便于扩展,可采用动态方式进行扩张;

    2)可对一个对象进行多次装饰;

    3)具体构件类和具体装饰构件类可以独立窗体变化,符合开闭原则。

    缺点是:需要定义过多的对象,会占用系统资源。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值