カスタムタグ内でsendRedirectすると、IllegalStateExceptionが発生するC#での開発

2005年02月24日

Decoratorパターン

オブジェクトに対して動的に責任を追加するパターン。

例としてホテルの部屋を考えてみる。
インターフェイス Room
実装A SingleRoom
実装B TwinRoom
デコレーターA ChildbedDecoration
デコレーターB FlowerDecoration

Roomインターフェイスにはinterior()メソッド宣言されており、このメソッドを呼ぶことにより、部屋の内装について知ることが出来る。


[Room]
public interface Room{
 public void interior();
}

[SingleRoom]
public class SingleRoom implements Room{
 public void interior(){System.out.println("ベッド1個");}
}

[TwinRoom]
public class TwinRoom implements Room{
 public void interior(){System.out.println("ベッド2個");}
}

[ChildbedDecoration]
public class ChildbedDecoration implements Room{
 private Room room;
 public ChildbedDecoration(Room r){room = r;}
 public void interior(){
  room.interior();
  System.out.println("+チャイルドベッド");
 }
}

[FlowerDecoration]
public class FlowerDecoration implements Room{
 private Room room;
 public FlowerDecoration(Room r){room = r;}
 public void interior(){
  room.interior();
  System.out.println("+花瓶に花が生けてある");
 }
}

TwinRoomをそのままinteriorを呼ぶ場合は
Room r = new TwinRoom();
r.interior();
とすると「ベッドが2個」と出力される。

次にTwinRoomにチャイルドベッドを入れたい場合は
Room r = new ChildbedDecoration(new TwinRoom());
r.interior();
とすると「ベッドが2個+チャイルドベッド」と出力される。

このようなパターンをDecoratorパターンというらしい。
FileInputStreamとBufferedInputStreamの関係がDecoratorパターにあたる。


kotani08 at 15:55│Comments(1)TrackBack(0) Java 

トラックバックURL

この記事へのコメント

1. Posted by Desktop Wallpapers   2017年08月12日 09:30
重要なことは、毎日勝つことではなく、いつも苦労しています。

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
カスタムタグ内でsendRedirectすると、IllegalStateExceptionが発生するC#での開発