デコレータ設計パターンを使用すると、同じクラスのオブジェクトの動作に影響を与えることなく、オブジェクトに機能を動的に追加できます。少し複雑に思えますが、コードを見るとすべてが明確になります。 特徴 - デコレータを使用すると、構造を変更せずに既存のオブジェクトに機能を追加できます。つまり、元のクラスは変更されません。 - デコレータ デザイン パターンは、既存のクラスのラッパーを提供する構造パターンです。 - デコレータ クラスは、次のように作成されます。元のクラスをラップし、元のクラスのメソッド シグネチャをそのまま維持しながら追加の機能を提供します。デコレータ設計パターンは、元のクラスに追加の責任をロードせずに分割するため、SOLID の単一責任の原則に従うために最もよく使用されます。デコレータ クラスへの組み込み - デコレータは、構造的に責任の連鎖パターン (責任の連鎖) とほぼ同様です。 次の重要な点を考慮する必要があります 。 - デコレータは、実行時にオブジェクトの動作を変更できる場合に便利です。このコードは保守と拡張が簡単です。- このパターンの欠点は、同じ型のデコレータ オブジェクトが多数使用されることです。 - デコレータ パターンは Java IO クラス (FileReader、BufferedReader など) でよく使用されます。 やること - インターフェイスの作成 - 具象の作成このインターフェイスの実装 - このインターフェイスを実装して、抽象デコレータを作成します。 - 抽象デコレータを継承する具象デコレータを作成しましょう。 - 具象デコレータを使用して、インターフェイスの具象実装を「装飾」します。 実装 : Shape インターフェイスと具象クラスを作成します。このインターフェースを実装するもの。次に、Shape インターフェイスを実装し、クラス フィールドとして Shape オブジェクトを持つ抽象デコレータ クラス ShapeDecorator を作成します。 - Shape はインターフェイスの名前です。 - Rectangle、Triangle、Circle クラスは、Shape インターフェイスを実装する具象クラスになります。 - ShapeDecorator は、同じ Shape インターフェイスを実装する抽象デコレータ クラスです。 - RedShapeDecorator は、ShapeDecorator を実装する具象クラスです。 - デモはRedShapeDecorator を使用して Shape オブジェクトを装飾するデモ クラス ステップ 1 : Shape インターフェイスを作成する
public interface Shape {
void draw();
}
ステップ 2 : このインターフェースの実装をいくつか作成しましょう。以下の例では円しかありませんが、実際にはさらに長方形と三角形をいくつか作成します。
public class Circle implements Shape{
@Override
public void draw() {
System.out.println("Я круг!");
}
}
ステップ 3 : Shape インターフェースを実装する抽象デコレータを作成する
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
//Конструктор, принимающий an object Shape
public ShapeDecorator(Shape decoratedShape) {
this.decoratedShape = decoratedShape;
}
public void draw() {
decoratedShape.draw();
}
}
ステップ 4 : 抽象クラスを継承する具体的なデコレータ クラスを作成する
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("Сообщение от RedShapeDecorator. Цвет границы: красный");
}
}
ステップ 5 : RedShapeDecorator を使用してオブジェクトに色を付ける
public class Demo {
public static void main(String[] args)
{
Shape circle = new Circle();
Shape redCircle= new RedShapeDecorator(new Circle());
Shape redRectangle= new RedShapeDecorator(new Rectangle());
Shape redTriangle = new RedShapeDecorator(new Triangle());
System.out.println("\nОбычный круг:");
circle.draw();
System.out.println("\nКруг с красной границей:");
redCircle.draw();
System.out.println("\nПрямоугольник с красной границей:");
redRectangle.draw();
System.out.println("\nТреугольник с красной границей:");
redTriangle.draw();
}
}
ステップ 6 : コンソールを見て喜ぶ
Обычный круг:
Я круг!
Круг с красной границей:
Я круг!
Сообщение от RedShapeDecorator. Цвет границы: красный
Прямоугольник с красной границей:
Я прямоугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
Треугольник с красной границей:
Я треугольник!
Сообщение от RedShapeDecorator. Цвет границы: красный
例としてデコレータ設計パターンを分析した結果、次の場合にその使用が正当であると結論付けることができます。 - オブジェクトの動作や状態を追加、改善、あるいは削除したい場合 - 単に機能を変更したい場合クラスの 1 つの特定のオブジェクトを変更し、残りは変更しないでください。ありがとうございます。 プロジェクト ファイルを含むリポジトリgeeksforgeeks.org サイトの 記事 に基づく初心者 Java 開発者のための ブログ
GO TO FULL VERSION