您的位置:首页 > 其它

结构模式之装饰模式注解

2011-10-31 08:07 204 查看
装饰模式主要用于对一个对象A的方法进行持续性地增强的模式。其采用多态的方式,通过一个装饰类含有下一个装饰类的引用进行不断地调用,最终会调用到最原始的那个对象A,从而使原始对象A拥有了许多其根本没有的功能。

下图为装饰模式的一个静态UML类图结构:



下面给出上面UML结构的代码参考实现。

抽象组件Component的代码如下:

public interface Component
{
void sampleOperation();
}

具体组件即原始对象A(而要功能增强的对象)代码如下:

public class ConcreteComponent implements Component
{
public void sampleOperation()
{
// Write your code here
}
}

抽象装饰类Decorator的代码如下:

public class Decorator implements Component
{
private Component component;
publicDecorator(Component component)
{
this.component = component;
}

public Decorator() {
}

public void sampleOperation()
{
component.sampleOperation();
}
}

该类这里用一个具体的类进行表示,但是在实际中,可以将其设定为抽象类会更为合理一些,同时将sampleOperation()这个方法设定为抽象方法,要求所有的具体的装饰类实现该方法。

具体装饰类ConcreteDecorator的代码如下:

public class ConcreteDecorator extends Decorator
{
public void sampleOperation()
{
//可以在此处附加一些业务方面
//....................
super.sampleOperation();
}
}

下面给出一个创建装饰类的典型代码:

New Decorator1(

New Decorator2(

New Decorator3(

NewConcreteComponent()

)

)

);

装饰模式与责任链模式有些类似,都是一个对象含有下一个对象的引用,而对客户端而言,只需要从第一个对象进行调用即可,不用关心最终是由哪一个对象进行执行的,但是二者还是有很多区别,首先,装饰模式一定是有一个最原始的对象,而其他的装饰类都是对这个原始的对象的增强的,所以通常情况下,其他装饰类的对应的方法都会被调用,一直到达最原始的这个对象。而责任链却未必会所有的责任对象都过一遍,它只要到达其所需要的地方就可以直接退出了。从本质上来看,责任链虽然前一个对象会含有后一个对象的引用,但是二者是平等的,但是装饰模式却不是,他是不平等的,最原始的那个对象是一定要被调用的,而其他的装饰对象则是对这个原始对象的增强,包装。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: