一. 什么是状态模式?
举个生活中的例子,你的女(亚)朋(古)友(兽)有老(fen)虎(nu)形态,和兔(kai)子(xin)形态,在不同的形态,对你的表达的爱意的方式也不一样,老虎使用"疯狂抓咬"表达,而兔子形态会使用"萌萌一击"表达.
二. 状态模式的使用场景?
- 行为随状态改变而改变的场景。
- 条件、分支语句的代替者。
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类.
三. 直观的状态模式
将开头的例子,用代码表示一下吧.
- 创建状态接口
->State.java
public interface State {
void love();
}
- 创建实现接口的实体类
->TigerState.java
public class TigerState implements State {
private String stateName="老虎形态";
@Override
public void love() {
System.out.println("使出疯狂抓咬,让你遍体鳞伤.");
}
@Override
public String toString() {
return stateName;
}
}
->Rabbit.java
public class RabbitState implements State {
private String stateName="兔子形态";
@Override
public void love() {
System.out.println("使出萌萌一击,让你得意洋洋.");
}
@Override
public String toString() {
return stateName;
}
}
- 创建状态转换器
->Transformer.java
public class Transformer {
private String name;
private State currentSate;
/**
* 切换状态
* @return
*/
public State transformTo(State state ){
currentSate=state;
System.out.println("切换到了"+state.toString());
return currentSate;
}
public void love(){
currentSate.love();
}
public Transformer(String name, State currentSate) {
this.name = name;
this.currentSate = currentSate;
System.out.println("创建了"+currentSate.toString()+"的"+name);
}
}
- 创建测试类
public class Test {
public static void main(String[] args) {
State state=new RabbitState();
Transformer gf=new Transformer("亚古兽",state);
gf.love();
//亚古兽超进化
gf.transformTo(new TigerState());
gf.love();
}
}
网友评论