装饰器模式(Decorator Pattern)是一种设计模式,它允许在不修改原始类代码的情况下,为对象添加新的功能。这种模式通过创建一个包装对象,也就是装饰器,来扩展原始对象的功能。装饰器可以包含多个其他装饰器,从而形成一个装饰器链,使得每个装饰器都可以修改或扩展前一个装饰器的功能。
在Java中,装饰器模式通常涉及到以下几个角色:
下面是一个简单的Java装饰器模式示例:
// 组件接口
interface Component {
void operation();
}
// 具体组件
class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("ConcreteComponent operation");
}
}
// 抽象装饰器
abstract class Decorator implements Component {
protected Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void operation() {
component.operation();
}
}
// 具体装饰器A
class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
addedBehavior();
}
private void addedBehavior() {
System.out.println("ConcreteDecoratorA added behavior");
}
}
// 具体装饰器B
class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
addedBehavior();
}
private void addedBehavior() {
System.out.println("ConcreteDecoratorB added behavior");
}
}
// 测试类
public class DecoratorPatternDemo {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component = new ConcreteDecoratorA(component);
component = new ConcreteDecoratorB(component);
component.operation();
}
}
在这个示例中,我们定义了一个组件接口Component
,一个具体组件ConcreteComponent
,以及两个具体装饰器ConcreteDecoratorA
和ConcreteDecoratorB
。在main
方法中,我们创建了一个ConcreteComponent
对象,然后通过装饰器链(ConcreteDecoratorA
和ConcreteDecoratorB
)来扩展其功能。运行这个程序,你会看到如下输出:
ConcreteComponent operation
ConcreteDecoratorA added behavior
ConcreteDecoratorB added behavior
这说明装饰器模式成功地扩展了Java对象的功能。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。