参考《设计模式的艺术软件开发人员内功修炼之道》-刘伟 著
实验目的
与桥接模式相似,装饰模式也采用组合的方式关联对象,不同之处在于装饰模式组合的对象实现了共同的接口
实验代码
package Decorator;
interface Document{
public void display();
}
class Word implements Document{
@Override
public void display() {
// TODO Auto-generated method stub
System.out.println("I'm word");
}
}
abstract class Decorator implements Document{
Document doc;
public Decorator(Document _doc){
doc = _doc;
}
public void display(){
doc.display();
}
}
class AdvanceWord extends Decorator{
public AdvanceWord(Document _doc) {
super(_doc);
// TODO Auto-generated constructor stub
}
public void display(){
super.display();
advance();
}
public void advance(){
System.out.println("I am AdvanceWord");
}
}
class SuperWord extends Decorator{
public SuperWord(Document _doc) {
super(_doc);
// TODO Auto-generated constructor stub
}
public void display(){
super.display();
advance();
}
public void advance(){
System.out.println("I am SuperWord");
}
}
public class DecoratorTest {
public static void main(String...args){
Document doc, advanceDoc, superDoc;
doc = new Word();
advanceDoc = new AdvanceWord(doc);
superDoc = new SuperWord(advanceDoc);
superDoc.display();
}
}
结果输出
I'm word
I am AdvanceWord
I am SuperWord
结论
- 装饰模式所有类同宗,实现共同的接口
- 装饰模式可以嵌套,装饰A 可以组合装饰B