Java構造設計パターンの装飾モードを実装する方法

WBOY
リリース: 2023-04-17 21:25:01
転載
1133 人が閲覧しました

はじめに

目的: 追加の責任をオブジェクトに動的に追加します。機能の追加という点では、装飾モードはサブクラスを生成するよりも柔軟です。

主な解決策: クラスの拡張には継承がよく使用されますが、継承によってクラスに静的な機能が導入され、拡張機能が増加するにつれてサブクラスはますます拡張されていきます。

使用方法: 多くのサブクラスを追加せずに拡張します。

解決方法: 特定の機能責任を分割し、デコレータ パターンを継承します。

キー コード:

1. Component クラスは抽象的な役割を果たすため、具体的に実装すべきではありません。

2. 変更されたクラスは Component クラスを参照および継承し、特定の拡張クラスは親クラスのメソッドをオーバーライドします。

使用シナリオ:

1. クラスの機能を拡張します。

2. 関数を動的に追加し、動的にキャンセルします。

実装

Shape インターフェイスと、Shape インターフェイスを実装するエンティティ クラスを作成します。次に、Shape インターフェイスを実装する抽象装飾クラス ShapeDecorator を作成し、Shape オブジェクトをそのインスタンス変数として使用します。 RedShapeDecorator は、ShapeDecorator を実装するエンティティ クラスです。 DecoratorPatternDemo クラスは RedShapeDecorator を使用して Shape オブジェクトを装飾します。

Java構造設計パターンの装飾モードを実装する方法

ステップ 1:

public interface Shape{
    void draw();
}
ログイン後にコピー

ステップ 2:

public class Rectangle implements Shape{
    @Override
    public ovid draw(){
        System.out.println("draw Rectangle");
    }
}
ログイン後にコピー
public class Cricle implements Shape{
    @Override
    public ovid draw(){
        System.out.println("draw Circle");
    }
}
ログイン後にコピー

ステップ 3:

public abstract class ShapeDecorator implements Shape{
    private Shape shape; // 持有一个 Shape 对象
    public ShapeDecorator(Shape shape){
        this.shape = shape;
    }
    public void draw(){
        shape.draw();// TODO 根据传进来的具体 Shape 对象,调用对应的 draw 方法
    }
}
ログイン後にコピー

ステップ 4:

public class RedShapeDecorator extends ShapeDecorator{
    public RedShapeDecorator(Shape shape){
        super(shape);
    }
    @Override
    public void draw(){
        shape.draw();
        setRedBorder(shape);
    }
    public void setRedBorder(Shape shape){
        System.out.println("Border Color: Red");
    }
}
ログイン後にコピー

ステップ 5

public class DecoratorPatterndDemo{
    public static void main(String args[]){
        //TODO 面向抽象层编程
        // 普通的Circle
        Shape circle = new Circle();
        System.out.println("Circle with normal Border");        
        circle.darw();
        // 红色边界的 Circle
        ShapeDecorator redCircle = new RedShapeDecorator(new Circle); 
        System.out.println("Circle of red Border");
        redCircle.draw();
        // 红色边界的 Rectangle
        ShapeDecorator redRectangle = new RedShapeDecorator(new Rectangel):
        System.out.println("Rectangle of red Border");
        redRectangle.draw();
    }
}
ログイン後にコピー

利点と欠点

利点: 装飾クラスと装飾クラスは独立して開発でき、互いに結合されません。装飾モードは継承の代替モードです。 . デコレーションモード 実装クラスの機能を動的に拡張できます。

欠点: 多層装飾はより複雑です。

以上がJava構造設計パターンの装飾モードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート