LoginSignup
0
0

More than 3 years have passed since last update.

あるオブジェクトの状態をクラス化する。サンプルでは、水クラスの状態を、氷、液体、気体という状態を想定し、水クラス、液体クラス、気体クラスとする

Design Pattarm MENU

以下のクラス構成で確認します

クラス 説明
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();
  }
}}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0