JAva装飾モード(Decorator Pattern)詳細
3140 ワード
デコレーション・モード(Decorator Pattern)を使用すると、既存のオブジェクトに構造を変更することなく新しい機能を追加できます.このタイプの設計モードは、既存のクラスとしてパッケージされた構造型モードに属します.
このモードは、既存のクラスをパッケージし、クラスメソッドの署名の完全性を維持する前提で、追加の機能を提供する装飾クラスを作成します.
以下の例を用いて,装飾器モードの使用を実証した.その中で、私たちは1つの形状に異なる色を装飾し、同時に形状類を変えません.
インプリメンテーション
ShapeインタフェースとShapeインタフェースを実装したエンティティクラスを作成します.次に、Shapeインタフェースを実装する抽象的な装飾クラスShapeDecoratorを作成し、Shapeオブジェクトをインスタンス変数とします.
RedShapeDecoratorはShapeDecoratorを実装したエンティティークラスです.
DecoratorPatternDemo、我々のプレゼンテーションクラスはRedShapeDecoratorを使用してShapeオブジェクトを装飾します.
ステップ1
インタフェースを作成します.
Shape.java
ステップ2
実装インタフェースのエンティティークラスを作成します.
Rectangle.java
手順3
Shapeインタフェースを実装した抽象的な装飾クラスを作成します.
ShapeDecorator.java
手順4
ShapeDecoratorクラスから拡張されたソリッド装飾クラスを作成します.
RedShapeDecorator.java
手順5
RedShapeDecoratorを使用してShapeオブジェクトを装飾します.
DecoratorPatternDemo.java
ステップ6
出力を確認します.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
このモードは、既存のクラスをパッケージし、クラスメソッドの署名の完全性を維持する前提で、追加の機能を提供する装飾クラスを作成します.
以下の例を用いて,装飾器モードの使用を実証した.その中で、私たちは1つの形状に異なる色を装飾し、同時に形状類を変えません.
インプリメンテーション
ShapeインタフェースとShapeインタフェースを実装したエンティティクラスを作成します.次に、Shapeインタフェースを実装する抽象的な装飾クラスShapeDecoratorを作成し、Shapeオブジェクトをインスタンス変数とします.
RedShapeDecoratorはShapeDecoratorを実装したエンティティークラスです.
DecoratorPatternDemo、我々のプレゼンテーションクラスはRedShapeDecoratorを使用してShapeオブジェクトを装飾します.
ステップ1
インタフェースを作成します.
Shape.java
public interface Shape {
void draw();
}
ステップ2
実装インタフェースのエンティティークラスを作成します.
Rectangle.java
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Rectangle");
}
}
Circle.java
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Shape: Circle");
}
}
手順3
Shapeインタフェースを実装した抽象的な装飾クラスを作成します.
ShapeDecorator.java
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape){
this.decoratedShape = decoratedShape;
}
public void draw(){
decoratedShape.draw();
}
}
手順4
ShapeDecoratorクラスから拡張されたソリッド装飾クラスを作成します.
RedShapeDecorator.java
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");
}
}
手順5
RedShapeDecoratorを使用してShapeオブジェクトを装飾します.
DecoratorPatternDemo.java
public class DecoratorPatternDemo {
public static void main(String[] args) {
Shape circle = new Circle();
Shape redCircle = new RedShapeDecorator(new Circle());
Shape redRectangle = new RedShapeDecorator(new Rectangle());
System.out.println("Circle with normal border");
circle.draw();
System.out.println("
Circle of red border");
redCircle.draw();
System.out.println("
Rectangle of red border");
redRectangle.draw();
}
}
ステップ6
出力を確認します.
Circle with normal border
Shape: Circle
Circle of red border
Shape: Circle
Border Color: Red
Rectangle of red border
Shape: Rectangle
Border Color: Red
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!