对读者的要求:1、具备面向对象思想。2、对抽象类、接口有一定了解。
核心思想:同一个方法,根据不同的状态,表现出不同的结果。
案例一:MM的cry(),可以愉快的哭、高兴的哭、傻傻的哭等。
设计思路:
1、定义一个MmState抽象类,分别:cry()、smile()、say()三个方法;
2、定义MM的一系列状态的具体实现类,比如:MMHappyState、MMUnHappyState;
3、MM类定义mmCry()方法,入参MmState(传入一个MmState具体实现类)。
//1.定义MMStae抽象类
public abstract class MmState {
public abstract void cry() ;//高兴的哭、激动的哭、痛苦的哭,等等
public abstract void smile() ;//
public abstract void say() ;//
}
//2.定义MMState的具体实现类
public class MMHappyState extends MmState {
@Override
public void cry() {
System.out.println("*^_^* 开心的哭了");
}
@Override
public void smile() {
System.out.println("*^_^* 高兴的微笑");
}
@Override
public void say() {
System.out.println("*^o^* 愉快的说");
}
}
//2.定义MMState的具体实现类
public class MMUnHappyState extends MmState{
@Override
public void cry() {
System.out.println("`=_=` 伤心的哭了");
}
@Override
public void smile() {
System.out.println("-_- 伤心的傻笑起来");
}
@Override
public void say() {
System.out.println(")o(· 悲伤的说");
}
}
//3.定义MM类,灵活根据不同的状态,执行同一个方法。
public class MM {
//根据传入不同的状态,执行不同状态下的cry方法
public static void mmCry(MmState state) {
state.cry();
}
public static void main(String[] args) {
mmCry(new MMHappyState());//传入开心的状态:就开心的哭
mmCry(new MMUnHappyState());//传入不高兴的状态:就伤心的哭
}
}
运行结果:
*^_^* 开心的哭了
`=_=` 伤心的哭了
总结:
1、以上案例主要讲述,命令模式的脉络,不涉及细节问题。
2、核心思想:同一个方法,根据不同的状态,表现出不同的结果。
以上案例,只为讲述State模式的设计思想,明白原理,灵活运用即可。设计模式的最高境界,不知道自己运用了设计模式。
欢迎吐槽指正,让我们一起变得强大!