あるオブジェクトの状態をクラス化する。サンプルでは、水クラスの状態を、氷、液体、気体という状態を想定し、水クラス、液体クラス、気体クラスとする
以下のクラス構成で確認します
クラス | 説明 |
---|---|
Water.class | 水を表すクラス 水の状態は、固体、液体、気体の3つとする |
waterState.interface | 水の状態を共通化するインターフェイス |
Ice.class | 状態が固体であることを表すクラス |
Liquid.class | 状態が液体であることを表すクラス |
Air.class | 状態が液体であることを表すクラス |
user(Main.class) | 乱数で水の状態を変化させる |
*user 他の開発者がこのパターンを利用する、という意味合いを含みます
Water.class
class Water{
waterState state = new Liquid();
void setState(waterState state){
this.state=state;
}
void show(){System.out.println(state.showState());}
}
waterState_interface
interface waterState{String showState();}
Ice.class
class Ice implements waterState{
public String showState() {return "Ice";}
}
Liquid.class
class Liquid implements waterState{
public String showState() {return "Liquid";
}
}
Air.class
class Air implements waterState{
public String showState() {return "Air";}
}
user(Main.class)
public static void main(String[] args){
Water water = new Water();
Random rand = new Random();
for(int i=0;i<10;i++){
int r = rand.nextInt(30);
if(r%5==0){water.setState(new Ice());}else{
if(r%3==0){water.setState(new Liquid());}else{
water.setState(new Air());
}}
water.show();
}
}}