读书人

设计方式(三)装饰模式

发布时间: 2013-03-28 10:20:24 作者: rapoo

设计模式(三)—装饰模式
一、装饰模式简介(Brief Introduction)

装饰模式—ecorator)动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

优点:把类中的装饰功能从类中搬移出去,这样可以简化原有的类。有效地把类的核心功能和装饰功能区分开了。

二、装饰模式分析(Analysis)

设计方式(三)—装饰模式

自己的理解:

Component给出一个抽象接口,以规范准备接收附加责任的对象和抽象装饰器。

ConcreteComponent:定了一个具体的对象,用来接收附加功能的类

Decorator:持有Component对象的实例,以用它进行装饰,并定义一个与抽象构件接口一致的接口,但对于Component来说,是无需知道Decorator的存在。

ConcreteDecorator:是具体的装饰对象,起到给Component添加职责的功能。

说明:

Decorator与Component之间既是Is a...的继承关系,又是Has a...的组合关系。使用具体装饰类(ConcreteDecorator)来装饰具体构件对象(ConcreteComponent),装饰完的对象依 旧是个Component类型。

Decorator模式解决的是类的功能的多向扩展,而不是单纯的类的继承。

Decorator模式提供了比继承更灵活的功能扩展,通过使用不同具体装饰对构件对象的排列组合地包装,能够不同功能的组合。

例子:

一个画可以挂在墙上,但通常我们会把这张画镶上画框,蒙上玻璃,然后再挂在墙上。这里的画框和玻璃就是对画的装饰,装饰后成为一个物体,后来实际挂在墙上的是画框。

设计方式(三)—装饰模式

三.案例分析(Example)

1.Component类


此汽车不符合你的个性要求,比如外表不够美观,发动机马力不足,不能满足你的速度激情,于是你需要对汽车的外表进行装饰,同时需要提高发动机的性能。这些操作通过装饰模式就能很好地解决问题。最终得到如下图所示的个性汽车。

设计方式(三)—装饰模式

例子:我们想在各方面改善我们的机房收费系统,我们可以为其添加导出excel表、导出报表、动态连接等功能。

读书人网 >软件开发

热点推荐