转载请注明出处:http://blog.youkuaiyun.com/lhy_ycu/article/details/39829859
状态模式(State):允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。状态模式说白了就是一个对象有不同的状态,不同的状态对应不同的行为,它其实是对switch case这样的语句的拓展。
一、uml建模:
二、代码实现
/**
* 示例:状态模式-- 一个对像有不同的状 态,不同的状态对应不同的行为
*
* 下面四则运算为例
*/
interface State {
public double operate(double num1, double num2);
}
/**
* 加法
*/
class AddOperator implements State {
@Override
public double operate(double num1, double num2) {
return num1 + num2;
}
}
/**
* 减法
*/
class SubOperator implements State {
@Override
public double operate(double num1, double num2) {
return num1 - num2;
}
}
/**
* 学生
*/
class Student {
private State state;
public Student(State state) {
this.state = state;
}
/**
* 设置状态
*/
public void setState(State state) {
this.state = state;
}
public double operate(double num1, double num2) {
return state.operate(num1, num2);
}
}
/**
* 客户端测试类
*
* @author Leo
*/
public class Test {
public static void main(String[] args) {
Student s1 = new Student(new AddOperator());
System.out.println(s1.operate(12, 23));
/**
* 改变状态,即改变了行为 --> 加法运算变成了减法运算
*/
s1.setState(new SubOperator());
System.out.println(s1.operate(12, 23));
}
}
三、总结
封装基类状态的行为,并将行为委托到当前状态。
本文通过一个简单的数学运算示例,介绍了状态模式的概念及其实现方式。状态模式允许对象在其内部状态改变时表现出不同的行为,从而避免使用复杂的条件判断语句。
303

被折叠的 条评论
为什么被折叠?



