设计模式-状态模式
2019-04-19 本文已影响0人
liuzhimi
介绍
状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。
状态模式与策略模式结构几乎完全一样,但它们的目的、本质却完全不一样。状态模式的行为是平行的、不可替换的;策略模式的行为彼此独立、可相互替换。
使用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为。
2.包含与对象状态相关的大量条件、分支语句。
优点:
1.封装了转换规则
2.将状态判断转换成了结构清晰的状态类族。
缺点:
增加了系统类和对象的个数
UML类图
State.jpg代码实现
State.java
public interface State {
public void doSomething(Controller controller);
}
On.java
public class On implements State {
@Override
public void doSomething(Controller controller) {
System.out.println("Current state is On");
controller.setState(this);
}
public String toString() {
return "Current state is On";
}
}
Off.java
public class Off implements State {
@Override
public void doSomething(Controller controller) {
System.out.println("Current state is Off");
controller.setState(this);
}
public String toString() {
return "Current state is Off";
}
}
Controller.java
public class Controller {
private State state;
public Controller() {
state = null;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
}
Main.java
public class Main {
public static void main(String[] args) {
Controller controller = new Controller();
On on = new On();
on.doSomething(controller);
System.out.println(controller.getState().toString());
Off off = new Off();
off.doSomething(controller);
System.out.println(controller.getState().toString());
}
}
输出:
Current state is On
Current state is On
Current state is Off
Current state is Off