お待ちください...

小波Note

四川 · 成都市11 ℃
日本語

Java Decorator

成都 (cheng du)2024/8/26 18:14:401.82k見積もり読書時間 6 分
QRコード
お気に入りCtrl + D / ⌘ + D
cover
IT FB(up 主)
バックエンド開発エンジニア

デコレーターパターンは、オブジェクトを特別なラッパーオブジェクトに配置して、これらのオブジェクトに振る舞いを追加することで、オブジェクトに新しい振る舞いをアタッチする構造設計パターンです。デコレーターパターンは、機能を拡張するためのサブクラス化に対する柔軟な代替手段を提供します。

定义组件接口

java
        public interface Component {
    String operation();
}

    

创建具体组件

java
        public class ConcreteComponent implements Component {
    @Override
    public void operation() {
        System.out.println("ConcreteComponent operation");
    }
}

    

创建装饰器

java
        public abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void operation() {
        component.operation();
    }
}

    

实现具体装饰器

java
        public 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");
    }
}

public 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");
    }
}

    

使用装饰器

java
        public class DecoratorPatternDemo {
    public static void main(String[] args) {
        Component component = new ConcreteComponent();
        Component decoratorA = new ConcreteDecoratorA(component);
        Component decoratorB = new ConcreteDecoratorB(decoratorA);

        decoratorB.operation();
    }
}

    
星空