设计模式-状态模式
状态模式指对象根据自身不同的状态表现出不同的行为
适用于状态转化条件判断复杂的情况,可以将复杂的判断逻辑下沉到一系列状态类中,减少判断分支语句
比如我们拿人生了三个阶段举例
先定义一个抽象的状态接口
public interface PersonState {
void doHomework();
void work();
void babysit();
}
给出儿童、成年和老年三个实现
public class ChildState implements PersonState{
@Override
public void doHomework() {
System.out.println("最烦做作业了,但是还是要做...");
}
@Override
public void work() {
System.out.println("工作是大人的事情,小孩子不需要工作。");
}
@Override
public void babysit() {
System.out.println("我还是个孩子,怎么看孩子!");
}
}
public class AdultState implements PersonState{
@Override
public void doHomework() {
System.out.println("成年人写什么作业!");
}
@Override
public void work() {
System.out.println("每天都在工作。");
}
@Override
public void babysit() {
System.out.println("一直在工作没时间看孩子!");
}
}
public class ElderlyState implements PersonState{
@Override
public void doHomework() {
System.out.println("作业是不可能做作业的!");
}
@Override
public void work() {
System.out.println("好不容易熬到退休工作也是不可能再工作的!");
}
@Override
public void babysit() {
System.out.println("在家看孩子...");
}
}
定义Person类,将三种行为委托给状态子类
public class Person {
public static final PersonState CHILD_STATE = new ChildState();
public static final PersonState ADULT_STATE = new AdultState();
public static final PersonState ELDERLY_STATE = new ElderlyState();
@Setter
private PersonState state;
public void doHomework(){
state.doHomework();
}
public void work(){
state.work();
}
public void babysit(){
state.babysit();
}
}
调用
public class Demo {
public static void main(String[] args) {
Person person = new Person();
person.setState(Person.CHILD_STATE);
person.doHomework();
person.work();
person.babysit();
person.setState(Person.ADULT_STATE);
person.doHomework();
person.work();
person.babysit();
person.setState(Person.ELDERLY_STATE);
person.doHomework();
person.work();
person.babysit();
}
}
状态模式避免了过多 switch- case 或者 if- else 的使用,更突出了单一职责原则,提高了代码的可维护性