装饰者模式

  Java   5分钟   313浏览   0评论

你好呀,我是小邹。

装饰者模式是一种结构型设计模式,它允许向一些对象添加新的功能,同时又不改变其他对象。这种类型的设计模式属于对象结构型模式,它是作为现有的类的一个包装。

装饰者模式的实现

首先,我们定义一个组件接口,所有的具体组件和装饰者都需要实现这个接口。

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 条评论