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

个人笔记整理-java设计模式之状态模式

2017-05-01 21:38 633 查看
我们以往在处理状态转换时,一般会用if-else 或者switch语句来控制,这样书写的不仅代码冗余,而且代码的可读性也差,而状态模式则可以解决这个问题

假设我们的遥控器有开机和关机两个状态,在开机和关机的时候,按键的反应是不同的。以此为案例设计一个状态模式来理解下该模式

//状态接口package singleinstance;

public interface TvState {
public void nextChannel();
public void prevChannel();
public void turnUp();
public void turnDown();
}
//开机状态和关机状态的实现
package singleinstance;

public class PoweroffState implements TvState{

@Override
public void nextChannel() {
// TODO Auto-generated method stub

}

@Override
public void prevChannel() {
// TODO Auto-generated method stub

}

@Override
public void turnUp() {
// TODO Auto-generated method stub

}

@Override
public void turnDown() {
// TODO Auto-generated method stub

}

}
package singleinstance;

public class PowerOnState implements TvState{

@Override
public void nextChannel() {
// TODO Auto-generated method stub
System.out.println("下一个频道");

}

@Override
public void prevChannel() {
// TODO Auto-generated method stub
System.out.println("上一个频道");

}

@Override
public void turnUp() {
// TODO Auto-generated method stub
System.out.println("声音调大");

}

@Override
public void turnDown() {
// TODO Auto-generated method stub
System.out.println("声音调小");

}

}


//电源控制接口
package singleinstance;

public interface PowerController {
public void powerOn();
public void powerOff();
}
//遥控器的实现
package singleinstance;

public class TvController implements PowerController{
TvState state;

public void setState(TvState state) {
this.state = state;
}

@Override
public void powerOn() {
// TODO Auto-generated method stub
setState(new PowerOnState());
}

@Override
public void powerOff() {
// TODO Auto-generated method stub
setState(new PoweroffState());

}
public void nextChannel(){
state.nextChannel();
}
public void prevChannel(){
state.prevChannel();
}
public void turnUp(){
state.turnUp();
}
public void turnDown(){
state.turnUp();
}
}


//开机和关机的时候分别对应两个状态,因此相应的动作也会因为状态的不同而做出不同的反应,比如关机的时候方法体为空无反应,开机的时候则做出相应的操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计 状态