【描述】
透明的方式对客户端的功能进行扩展,是继承关系的一个替代方案。
与集成关系的区别:继承关系是一个树状结构,各种扩展成为父子关系,无法同时实现两个兄弟功能。装饰模式可以随便组合
与封装的区别:装饰模式是以透明的方式进行扩展,就是说原来的功能不发生变化。
经典使用:
【使用场合】
1. 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
比如游戏中某些魔法功能。魔法有效的时候,人物就有某种超能,失效后回复常态。
2. 需要增加由一些基本功能的排列组合而产生的复合功能。
【实现步骤】
1.从同一父类扩展两个字类,装饰者和被装饰者。
2.使用被装饰者对装饰类实例化。(注意:修饰类不能直接实例化)
透明的方式对客户端的功能进行扩展,是继承关系的一个替代方案。
与集成关系的区别:继承关系是一个树状结构,各种扩展成为父子关系,无法同时实现两个兄弟功能。装饰模式可以随便组合
与封装的区别:装饰模式是以透明的方式进行扩展,就是说原来的功能不发生变化。
经典使用:
BufferedReader br = new BufferedReader(new FileReader("readme.txt")); 【使用场合】
1. 需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
比如游戏中某些魔法功能。魔法有效的时候,人物就有某种超能,失效后回复常态。
2. 需要增加由一些基本功能的排列组合而产生的复合功能。
【实现步骤】
1.从同一父类扩展两个字类,装饰者和被装饰者。
2.使用被装饰者对装饰类实例化。(注意:修饰类不能直接实例化)
public interface Component {
public void operation();
}
public class ConcreteComponent implements Component {
public void operation() {
// TODO 自動生成されたメソッド・スタブ
System.out.println("do something");
}
}
public class Decorator implements Component {
private Component component;
public Decorator(Component component){
this.component = component;
}
//对现有功能扩展
public void operation() {
//do something before
System.out.println("before");
component.operation();
System.out.println("after");
//do something after
}
//增加新功能
public void newOperation() {
System.out.println("new operation");
//component.operation();
}
}
装饰模式详解
本文介绍了一种设计模式——装饰模式,该模式允许以透明的方式扩展一个对象的功能而不改变其结构。适用于需要动态添加职责到对象或者组合基本功能形成复合功能的场景。
173万+

被折叠的 条评论
为什么被折叠?



