你好呀,我是小邹。
装饰者模式是一种结构型设计模式,它允许向一些对象添加新的功能,同时又不改变其他对象。这种类型的设计模式属于对象结构型模式,它是作为现有的类的一个包装。
装饰者模式的实现
首先,我们定义一个组件接口,所有的具体组件和装饰者都需要实现这个接口。
public interface Component {
void operation();
}
然后,我们定义一个具体组件,它实现了组件接口。
public class ConcreteComponent implements Component {
@Override
public void operation() {
System.out.println("ConcreteComponent operation.");
}
}
接下来,我们定义一个装饰者,它也实现了组件接口,并且持有一个对Component类型的引用。在装饰者的operation()方法中,它调用了被装饰对象的operation()方法。
public abstract class Decorator implements Component {
protected Component component;
public Decorator(Component component) {
this.component = component;
}
@Override
public void operation() {
component.operation();
}
}
最后,我们定义一些具体的装饰者,它们扩展了Decorator类,并在其operation()方法中添加了一些新的行为。
public class ConcreteDecoratorA extends Decorator {
public ConcreteDecoratorA(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
addedBehaviorA();
}
public void addedBehaviorA() {
System.out.println("Added behavior A.");
}
}
public class ConcreteDecoratorB extends Decorator {
public ConcreteDecoratorB(Component component) {
super(component);
}
@Override
public void operation() {
super.operation();
addedBehaviorB();
}
public void addedBehaviorB() {
System.out.println("Added behavior B.");
}
}
在客户端代码中,我们可以通过组合不同的装饰者来为具体组件添加不同的行为。
public class Client {
public static void main(String[] args) {
Component component = new ConcreteComponent();
component = new ConcreteDecoratorA(component);
component = new ConcreteDecoratorB(component);
component.operation();
}
}
在上述代码中,ConcreteDecoratorA和ConcreteDecoratorB分别为ConcreteComponent添加了不同的行为,而这些行为的添加并不影响ConcreteComponent和其他组件的行为,这就是装饰者模式的魅力所在。

评论区 0