「Patternの設計」ステータス・アレイ
ステータスモード
ルールのセットに基づいてオブジェクトの状態を変更し、オブジェクトが実行できる動作を変更するモード.
オブジェクトの特定のステータスをクラスとして宣言し、そのステータスでクラスで実行できる動作をメソッドとして定義します.
こうぞう
インプリメンテーション
蛍光灯の作成
State.class
public interface State{
void on_button_pushed(Light light);
void off_button_pushed(Light light);
}
public class ON implements State{
private static ON on = new ON(); // ON 클래스의 인스턴스로 초기화됨
private ON() { }
public static ON getInstance() { // 초기화된 ON 클래스의 인스턴스를 반환함
return on;
}
public void on_button_pushed(Light light){ // ON 상태일 때 On 버튼을 눌러도 변화 없음
System.out.println("반응 없음");
}
public void off_button_pushed(Light light){
light.setState(OFF.getInstance());
System.out.println("Light Off!");
}
}
OFF.classpublic class OFF implements State{
private static OFF off = new OFF();
private OFF() { }
public static OFF getInstance() {
return off;
}
public void on_button_pushed(Light light){
light.setState(ON.getInstance());
System.out.println("Light On!");
}
public void off_button_pushed(Light light){
System.out.println("반응 없음");
}
}
-蛍光灯の状態に特化した機能を実施するLight.class
public class Light{
private State state;
public Light(){
state = OFF.getInstance();
}
public void setState(State state){
this.state = state;
}
public void on_button_pushed(){
state.on_button_pushed(this);
}
public void off_button_pushed(){
state.off_button_pushed(this);
}
}
Main.class
public static void main(String[] args) {
Light light = new Light();
light.on_button_pushed();
light.on_button_pushed();
light.off_button_pushed();
light.off_button_pushed();
}
実行結果>>>Light On!
>>>반응 없음
>>>Light Off!
>>>반응 없음
メリットとデメリット
1つのオブジェクトに対して複数のアクションを実行する必要がある場合には、状態オブジェクトのみを修正することにより、アクション
関連項目:
Reference
この問題について(「Patternの設計」ステータス・アレイ), 我々は、より多くの情報をここで見つけました https://velog.io/@cham/Design-Pattern-상태-패턴State-Patternテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol