状态模式
来源:互联网 发布:seo数据分析 编辑:程序博客网 时间:2024/05/24 16:13
状态模式(别名:状态对象)
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
一 、 概述
一个对象的状态依赖于它的变量的取值情况,对象在不同的运行环境中,可能具有不同的状态。在许多情况下,对象调用方法所产生的行为效果依赖于它当时的状态。
状态模式的关键是将对象的状态封装成为独立的类,对象调用方法时,可以委托当前对象所具有的状态调用相应的方法,使得当前对象看起来好像修改了它的类。
二、状态模式的结构与使用
模式的结构中包括三种角色:
模式UML类图
1.环境(Context):Thermometer.java
public class Thermometer{
TemperatureState state;
public void showMessage(){
System.out.println("***********");
state.showTemperature();
System.out.println("***********");
}
public void setState(TemperatureState state){
this.state=state;
}
}2.抽象状态(State):TemperatureState.java
public interface TemperatureState{
public void showTemperature();
}
3.具体状态(Concrete State)_1:LowState.java
public class LowState implementsTemperatureState{
double n=0;
LowState(double n){
if(n<=0)
this.n=n;
}
public void showTemperature(){
System.out.println("现在温度是"+n+"属于低温度");
}
}3.具体状态(Concrete State)_2:MiddleState.java
public class MiddleState implementsTemperatureState{
double n=15;
MiddleState(int n){
if(n>0&&n<26)
this.n=n;
}
public void showTemperature(){
System.out.println("现在温度是"+n+"属于正常温度");
}
}3.具体状态(Concrete State)_3:HeightState.java
public class HeightState implementsTemperatureState{
double n=39;
HeightState(int n){
if(n>=39)
this.n=n;
}
public void showTemperature(){
System.out.println("现在温度是"+n+"属于高温度");
}
}
4.应用 Application.java
public class Application{
public static void main(String args[]) {
TemperatureState state=newLowState(-12);
Thermometer thermometer=newThermometer();
thermometer.setState(state);
thermometer.showMessage();
state=new MiddleState(20);
thermometer.setState(state);
thermometer.showMessage();
state=new HeightState(39);
thermometer.setState(state);
thermometer.showMessage();
}
}三、状态模式的优点
- 状态模式(状态变化)
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- 状态模式
- JSTL 核心标签库 使用
- 怎么修改boot.ini文件
- 用Eclipse打包jar程序直接运行(3.Eclipse打包总结)_hanCSDN_20130821
- 决策树
- 不生成core文件原因
- 状态模式
- CreateToolhelp32Snapshot枚举进程
- 设计模式六大原则(2):里氏替换原则
- Jquery插件原来就这么简单
- ios UDID 替代方案
- 设计模式六大原则(3):依赖倒置原则
- jdbc连接oracle报错_hanCSDN_20130821
- 页面中文传值,出现乱码
- android FragmentTabhost+ViewPager实现可滑动的标签页