结构模式之装饰模式注解
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()
)
)
);
装饰模式与责任链模式有些类似,都是一个对象含有下一个对象的引用,而对客户端而言,只需要从第一个对象进行调用即可,不用关心最终是由哪一个对象进行执行的,但是二者还是有很多区别,首先,装饰模式一定是有一个最原始的对象,而其他的装饰类都是对这个原始的对象的增强的,所以通常情况下,其他装饰类的对应的方法都会被调用,一直到达最原始的这个对象。而责任链却未必会所有的责任对象都过一遍,它只要到达其所需要的地方就可以直接退出了。从本质上来看,责任链虽然前一个对象会含有后一个对象的引用,但是二者是平等的,但是装饰模式却不是,他是不平等的,最原始的那个对象是一定要被调用的,而其他的装饰对象则是对这个原始对象的增强,包装。
下图为装饰模式的一个静态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()
)
)
);
装饰模式与责任链模式有些类似,都是一个对象含有下一个对象的引用,而对客户端而言,只需要从第一个对象进行调用即可,不用关心最终是由哪一个对象进行执行的,但是二者还是有很多区别,首先,装饰模式一定是有一个最原始的对象,而其他的装饰类都是对这个原始的对象的增强的,所以通常情况下,其他装饰类的对应的方法都会被调用,一直到达最原始的这个对象。而责任链却未必会所有的责任对象都过一遍,它只要到达其所需要的地方就可以直接退出了。从本质上来看,责任链虽然前一个对象会含有后一个对象的引用,但是二者是平等的,但是装饰模式却不是,他是不平等的,最原始的那个对象是一定要被调用的,而其他的装饰对象则是对这个原始对象的增强,包装。
相关文章推荐
- 结构类模式(四):装饰(Decorator)
- JAVA设计模式(11):结构型-装饰模式(Decorator)
- 十、装饰(Decorator)模式 --结构模式(Structural Pattern)
- 设计模式---结构类型---装饰
- 结构性模式-装饰模式
- 基础加强:类加载器 ---注解 ---动态代理(装饰设计模式)
- Java 设计模式之装饰模式的详解(结构模式)
- 结构模式--之--装饰模式
- java 设计模式-结构模式之装饰模式
- JAVA设计模式(11):结构型-装饰模式(Decorator)
- Decorator模式(装饰模式 结构型)
- 九、结构模式之装饰(Decorator)模式
- Java设计模式(7)结构型:装饰模式
- 设计模式--结构模式--装饰模式--Java
- 结构模式之适配器模式注解
- 九、结构模式之装饰(Decorator)模式
- 结构模式之享元模式注解
- Java 模式3(结构模式) - 适配器模式,缺省适配器模式,合成模式, 装饰模式,代理模式
- 结构性设计模式之装饰模式
- 设计模式(二)结构模式(适配器模式、双向适配器模式、装饰模式)