您的位置:首页 > 编程语言 > Java开发

Java设计模式之状态模式

2017-04-20 20:44 225 查看
一、定义

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

二、角色

 1 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。

 2 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。

3 具体状态(Concrete State):实现抽象状态定义的接口。

三、以电视机开关控制为例,写一个demo

1、抽象状态

package com.example.state;
/**
* 抽象状态类
* @author zeng
*
*/
public interface TVState {
//开机
public void turnOn();
//关机
public void turnOff();
//下一个频道
public void nextChanel();
//上一个频道
public void preChanel();

}


2.具体状态1

package com.example.state;

public class PowerOn implements TVState {

@Override
public void turnOn() {
System.out.println("开机");

}

@Override
public void turnOff() {
System.out.println("关机");
}

@Override
public void nextChanel() {
System.out.println("下一个频道");
}

@Override
public void preChanel() {
System.out.println("上一个频道");
}

}


3、具体状态2

package com.example.state;

public class PowerOff implements TVState {

@Override
public void turnOn() {
System.out.println("开机");

}

@Override
public void turnOff() {
System.out.println("关机");

}

@Override
public void nextChanel() {
System.out.println("请先开机");
}

@Override
public void preChanel() {
System.out.println("请先开机");
}

}


4、上下文环境,在此处是一个状态控制的管理器

package com.example.state;

public class TVControl {
private TVState tvState;
private TVState turnOn,turnOff;

public TVControl() {
turnOn = new PowerOn();
turnOff = new PowerOff();

}

public void turnOn() {
tvState = turnOn;
tvState.turnOn();

}

public void turnOff() {
tvState = turnOff;
tvState.turnOff();

}

public void nextChanel() {
tvState.nextChanel();

}

public void preChanel() {
tvState.preChanel();

}

}


5、客户类

package com.example.state;

public class Client {

public static void main(String[] args) {
TVControl tvControl = new TVControl();
tvControl.turnOn();
tvControl.turnOff();
tvControl.nextChanel();
tvControl.turnOn();
tvControl.preChanel();

}

}


打印结果

开机
关机
请先开机
开机
上一个频道
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: