个人笔记整理-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 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();
}
}
//开机和关机的时候分别对应两个状态,因此相应的动作也会因为状态的不同而做出不同的反应,比如关机的时候方法体为空无反应,开机的时候则做出相应的操作
假设我们的遥控器有开机和关机两个状态,在开机和关机的时候,按键的反应是不同的。以此为案例设计一个状态模式来理解下该模式
//状态接口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();
}
}
//开机和关机的时候分别对应两个状态,因此相应的动作也会因为状态的不同而做出不同的反应,比如关机的时候方法体为空无反应,开机的时候则做出相应的操作
相关文章推荐
- 个人笔记整理-java设计模式之单例模式
- 个人笔记整理-java设计模式之策略模式
- java学习笔记-设计模式21(状态模式)
- java/android 设计模式学习笔记(19)---状态模式
- JAVA设计模式笔记整理(一)
- Java开发中的23+2种设计模式学习个人笔记(未完待续)
- 设计模式学习笔记---状态模式state pattern(Java版)
- Java设计模式(个人整理)
- java个人学习笔记09(单例设计模式)
- JAVA设计模式笔记整理(三)
- JAVA设计模式笔记整理(二)
- JAVA设计模式之单例模式 - JAVA课堂笔记整理
- JAVA设计模式笔记整理(四)
- java设计模式之单例模式----个人笔记
- 设计模式笔记(22)---状态模式(行为型)
- [设计模式整理笔记 二] 简单工厂模式(Simple Factory)
- [设计模式整理笔记 三] 工厂模式(Factory)
- [设计模式整理笔记 九] 外观模式(Facade)
- JAVA与模式学习笔记之设计原则
- [设计模式整理笔记 五] 创建者模式(Builder)