デザインパターンシリーズ-装飾パターン

オリジナル:中かっこMC(WeChatパブリックアカウント:huakuohao-mc)、共有を歓迎します。転載のソースを保管してください。

デコレータパターンは主に、クラスやオブジェクトの構造を変更せずにいくつかの機能を追加するために使用されます。主な実装のアイデアは、元のクラスを含み、追加機能を提供するデコレータクラスを定義することです。

例えば

対応するグラフィックパターンを描画できるグラフィッククラスがあるとします。元のグラフィックスクラスを変更せずにグラフィックスに色を追加したい場合は、装飾モードの使用を検討できます。

UML最初にクラス図を見てみましょう。

decorator.png

特定のコード実装ロジックを見てみましょう。

描画機能を実現するためのグラフィカルインターフェイス。

public interface Shape {
    void draw();
}
复制代码

クラスはCircle円を実装します

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Shape: Circle");
    }
}
复制代码

グラフィックデコレーションクラスを定義してカラーリング関数を実装し、最初に元のクラスを含む抽象的な基本デコレーションクラスを定義し、そのサブクラスは特定のカラーカラーリングを実装します。

public abstract class ShapeDecorator implements Shape {

    //引用shap类
    protected Shape decoratedShape;

    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }

    @Override
    public void draw() {
        decoratedShape.draw();
    }
}
复制代码

RedShapeDecorator特定の着色機能を実装するための具体的な着色サブクラス。

public class RedShapeDecorator extends ShapeDecorator {
    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }
    @Override
    public void draw() {
        decoratedShape.draw();
        //增加装饰功能
        setRedBorder(decoratedShape);
    }
    //私有着色方法
    private void setRedBorder(Shape decoratedShape){
        System.out.println("Border Color: Red");
    }
}
复制代码

クライアントコードはこのように使用されます

public class DecoratorPatternDemo {
    public static void main(String[] args){

        Shape circle = new Circle();

        //被装饰类修饰的Cirle,画出的圆是红色的。
        Shape redCircle = new RedShapeDecorator(new Circle());

        //普通圆
        circle.draw();
        //红色的圆
        redCircle.draw();
    }
}
复制代码

要約する

装飾パターンは構造パターンの1つであり、主に、元のクラスやオブジェクトの構造を変更せずに、クラスやオブジェクトにいくつかの便利な小さな関数を追加する問題を解決するために使用されます。

この記事は www.tutorialspoint.com/design_patt…を参照しています

おすすめの読み物

1. Javaでの並行プログラミングに関するもの(10)-最終的な要約

2.プログラマーが習得する必要のある一般的なネットワーク問題特定ツール

3.この古代のAwkの武器の使い方を知っていますか?

4.ELKログ検索操作および保守プラットフォームのセットを構築するように指導します

おすすめ

転載: juejin.im/post/7079630910491983885