ステータスモード-if-elseの煩雑な構造を省く
5107 ワード
状態モード定義機能インタフェース、異なる状態での機能実装、状態インタフェースの定義、controllerでのsetStateによる後続の異なる動作の生成を一言で説明する.
機能インタフェース
機能実装インタフェース1
機能実装インタフェース2
ステータスインタフェース
Controller
cliet呼び出し
利点:Stateモードは、特定の状態に関連するすべての動作を1つの状態オブジェクトに配置し、特定の状態に関連するコードを組織するより良い方法を提供し、煩雑な状態判断を構造が明確な状態ファミリーに変換し、コードの膨張を避ける同僚でも拡張性とメンテナンス性を保証します.
欠点:システムクラスとオブジェクトの個数を増やしました.
機能インタフェース
public interface Function {
void drive();
void run();
void back();
}
機能実装インタフェース1
public class OffLineState implements Function {
@Override
public void drive() {
System.out.print(" drive");
}
@Override
public void run() {
System.out.print(" run");
}
@Override
public void back() {
System.out.print(" back");
}
}
機能実装インタフェース2
public class OnLineState implements Function {
@Override
public void drive() {
System.out.print(" drive");
}
@Override
public void run() {
System.out.print(" run");
}
@Override
public void back() {
System.out.print(" back");
}
}
ステータスインタフェース
public interface State {
void offLine();
void onLine();
}
Controller
public class StateController implements State {
Function func;
public void setstate(Function c) {
this.func = c;
}
@Override
public void offLine() {
//
setstate(new OffLineState());
}
@Override
public void onLine() {
//
setstate(new OnLineState());
}
public void drive() {
func.drive();
}
public void run() {
func.run();
}
public void back() {
func.back();
}
}
cliet呼び出し
/**
* : ,
*/
public void testState() {
StateController controller = new StateController();
//
controller.onLine();
// if-else
controller.run();
controller.drive();
controller.back();
}
利点:Stateモードは、特定の状態に関連するすべての動作を1つの状態オブジェクトに配置し、特定の状態に関連するコードを組織するより良い方法を提供し、煩雑な状態判断を構造が明確な状態ファミリーに変換し、コードの膨張を避ける同僚でも拡張性とメンテナンス性を保証します.
欠点:システムクラスとオブジェクトの個数を増やしました.