オブジェクトをラップし、ラップしたオブジェクトの機能を拡張する
サンプルコードでは、新しく機能を追加する代わりに、Stringオブジェクトをカッコでラップします
以下のクラス構成で確認します
クラス | 説明 |
---|---|
abstract Display.class |
各クラスの共通型とする 抽象メソッドを定義 |
Message.class | Displayを拡張 このクラスのStringフィールドがラップ対象 |
Decorator.class | Displayを拡張 Decoratorを実装する |
user(Main.class) | 動作を確認する |
*user 他の開発者がこのパターンを利用する、という意味合いを含みます
以下はサンプルコードです
abstract_class_Display
abstract class Display{
abstract String getStr();
}
Message.class
class Message extends Display{
String msg;
Message(String s){this.msg=s;}
String getStr() {return msg;}
}
Decorder.class
class Decorator extends Display{
Display display;
StringBuffer sb = new StringBuffer();
Decorator(Display d){this.display=d;}
String getStr(){
return makeBorder(display.getStr());}
String makeBorder(String msg){
sb.append("<")
.append(msg)
.append(">");
return sb.toString();
}
}
user(Main.class)
public static void main(String[] args){
Display d1 = new Message("Hello java");
Display d2 = new Decorator(new Decorator(new Decorator(d1)));
System.out.println(d2.getStr());
}