状态模式--随遇而安(行为模式08)
来源:互联网 发布:photoshop软件功能 编辑:程序博客网 时间:2024/05/22 22:51
什么是状态模式
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了他的类。
状态模式中的行为是由状态来决定的,不同状态下有不同的行为,状态模式和策略模式的结构几乎完全一样,但他们的目的、本质却完全不同。状态模式的行为是平行不可替换的,策略模式的行为是相互独立可以替换的。
状态模式的适用场景
对象的行为取决于他的状态并随之改变行为。
状态模式用例
电视机和遥控器的关系,开机状态下我们可以切换频道,调节音量等操作,在开机状态下开机无效,关机状态下我们操作音量频道也是无效的。
UML类图
接口TVState:
public interface TVState { public void nextChannel(); public void preChannel(); public void turnUp(); public void turnDown();}
实现类PowerOnState:
public class PowerOnState implements TVState { @Override public void nextChannel() { System.out.println("切换到下一频道"); } @Override public void preChannel() { System.out.println("切换到上一频道"); } @Override public void turnUp() { System.out.println("调大音量"); } @Override public void turnDown() { System.out.println("调小音量"); }}
实现类PowerOffState:
public class PowerOffState implements TVState { @Override public void nextChannel() { // TODO Auto-generated method stub } @Override public void preChannel() { // TODO Auto-generated method stub } @Override public void turnUp() { // TODO Auto-generated method stub } @Override public void turnDown() { // TODO Auto-generated method stub }}
接口PowerControllor:
public interface PowerControllor { public void powerOn(); public void powerOff();}
实现类TVControllor:
public class TVControllor implements PowerControllor,TVState { TVState mState; public void setTVState(TVState mTVState){ this.mState = mTVState; } @Override public void powerOn() { setTVState(new PowerOnState()); System.out.println("开机了"); } @Override public void powerOff() { setTVState(new PowerOffState()); System.out.println("关机了"); } @Override public void nextChannel() { mState.nextChannel(); } @Override public void preChannel() { mState.preChannel(); } @Override public void turnUp() { mState.turnUp(); } @Override public void turnDown() { mState.turnDown(); }}
测试类:
public class Test { public static void main(String[] args) { TVControllor tvControllor = new TVControllor(); //开机 tvControllor.powerOn(); //切换频道 tvControllor.nextChannel(); //调高音量 tvControllor.turnUp(); //关机 tvControllor.powerOff(); //调高音量,因为是关机状态,此时不再生效 tvControllor.turnUp(); }}
运行结果:
开机了切换到下一频道调大音量关机了
状态模式总结
状态模式的关键在于对于不同的状态下对同一行为有不同的响应。
状态模式的优点:避免代码膨胀同时也保证了可扩展性。
状态模式的缺点:会增加系统类和对象数量
阅读全文
0 0
- 状态模式--随遇而安(行为模式08)
- 随遇而安状态模式--笔记
- 随遇而安-状态模式
- 状态模式——随遇而安
- 行为模式-状态模式
- 行为模式-状态模式
- 状态模式 - 行为模式
- 设计模式之状态模式——随遇而安
- 行为模式:State(状态)
- 状态模式(行为型)
- 行为型模式-----状态模式(State)
- 行为型模式-状态
- 状态模式(行为型)
- 状态模式(行为型)
- 状态模式(行为类)
- 设计模式-行为-状态
- 行为型模式--状态模式
- 行为型模式-状态模式
- C与C++区别
- 机器学习17-随机森林中的细节点(更新中)
- 用maven插件+Mabatis-generator生成 Mapper DO 文件
- 学习和理解C#中的事件
- Vistual Studio Code中Markdown使用数学公式
- 状态模式--随遇而安(行为模式08)
- HDFS
- VS2010 VC++编译程序显示过期并且不能运行解决方案参考
- ViewPager 的adapter 设置notifyDataSetChanged(),后 ViewPager.setCurrentItem()无效。(页面不滚动)
- Java中关键字作用大全
- Linux 设置开机启动项的几种方法
- 学习和理解C#的委托
- Fiddler显示IP的设置方法
- Jquery提交表单之ajaxSubmit()方法