场景:假设有一个接口,这个接口已经被10个实现类实现了,其中5个实现类需要实现同一个方法。需要新增一个方法,那么需要在实现类中都实现新增的方法才可以。如何优化
下面是一个使用装饰器模式的示例代码:
首先,定义一个接口:
java
interface Interface {
void method1();
}
然后,创建一个装饰器类,该类实现了接口,并持有一个接口的实例:
java
class Decorator implements Interface {
private Interface implementation;
public Decorator(Interface implementation) {
this.implementation = implementation;
}
@Override
public void method1() {
implementation.method1();
}
// 新添加的方法
public void newMethod() {
System.out.println("This is a new method.");
}
}
接下来,创建一个具体的实现类,并使用装饰器类来包装它:
java
class ConcreteImplementation implements Interface {
@Override
public void method1() {
System.out.println("This is the implementation of method1.");
}
}
public class Main {
public static void main(String[] args) {
ConcreteImplementation concreteImplementation = new ConcreteImplementation();
// 创建一个装饰器对象,并将实现类的实例传递给它
Decorator decorator = new Decorator(concreteImplementation);
// 调用原始方法
decorator.method1();
// 调用新添加的方法
decorator.newMethod();
}
}
在上面的示例中,首先创建了一个具体的实现类
ConcreteImplementation
,它实现了接口中的方法 method1
。然后,创建了一个装饰器类 Decorator
,它也实现了接口,并持有一个接口实例。在装饰器类中,实现了原始方法 method1
,并通过持有接口实例来调用原始方法的实现。此外,还添加了一个新方法 newMethod
。
在
main
方法中,创建了一个具体的实现类实例 concreteImplementation
。然后,使用装饰器类创建了一个装饰器对象 decorator
,将实现类的实例传递给它。这样,decorator
对象就具有了原始方法和新添加的方法的能力。
最后,通过
decorator
对象调用原始方法和新添加的方法。
通过使用装饰器模式,可以在不修改原始实现类的情况下,方便地添加新方法,并对原始方法的行为进行扩展或修改。这样可以提高代码的可维护性和灵活性。