设计模式-装饰器模式

发布时间 2023-12-21 14:23:24作者: xiaoyuanhost

场景:假设有一个接口,这个接口已经被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 对象调用原始方法和新添加的方法。

 

通过使用装饰器模式,可以在不修改原始实现类的情况下,方便地添加新方法,并对原始方法的行为进行扩展或修改。这样可以提高代码的可维护性和灵活性。