状态模式用于根据状态决定行为的场景。

比如一个人处于不同的心情时,会说不同的话,会做不同的事情,说话和做事由状态决定。

这里可以将心情设计为一个抽象类,开心,伤心,抑郁时的说话,做事的行为作为抽象方法,并由具体的心情类实现这些抽象方法,将心情类传给人,在人的方法里使用心情类的方法。

然后,看代码,实现起来就很容易理解,

心情抽象类

public abstract class Emotion {abstract void say();abstract void doSomething();
}

具体实现类,开心

public class Happy extends Emotion {@Overridevoid say() {System.out.println("I am happy");}@Overridevoid doSomething() {System.out.println("dance");}
}

抑郁,

public class Depressed extends Emotion {@Overridevoid say() {System.out.println("I am depressed");}@Overridevoid doSomething() {System.out.println("eat");}
}

人,

public class Person {private Emotion emotion;public void setEmotion(Emotion emotion) {this.emotion = emotion;}public void say() {emotion.say();}public void doSomething() {emotion.doSomething();}}

测试方法:

public class Test {public static void main(String[] args) {Person p = new Person();p.setEmotion(new Happy());p.say(); p.doSomething();p.setEmotion(new Depressed());p.say(); p.doSomething();}}

Java 设计模式之 State 状态模式相关推荐

  1. 设计模式之 State(状态模式)通俗理解

    23种设计模式 1 State 模式的定义 不同的状态,不同的行为;或者说,每个状态有着相应的行为. 2 何时使用? 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了它的类.状态模式 ...

  2. 设计模式21:State 状态模式(行为型模式)

    State 状态模式(行为型模式) 动机(Motivation) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态的行为就可能完全不同. ...

  3. 设计模式之略见一斑(状态模式State)

    设计模式中的状态模式相对比较简单,简单的说就是对某个对象的状态进行管理.对象的状态如果的多的话,假如没有对其进行管理,极易造成管理混乱.从而使系统难以维护,所以State模式的意图就是将与状态有关的处 ...

  4. Java设计模式(装饰者模式-组合模式-外观模式-享元模式)

    Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...

  5. java设计模式2-观察者模式

    java设计模式2-观察者模式 什么是观察者模式? 何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新. 在这里,发生改变 ...

  6. 【游戏设计模式】之三 状态模式、有限状态机

    转载自:https://blog.csdn.net/poem_qianmo/article/details/52824776 游戏开发过程中,各种游戏状态的切换无处不在.但很多时候,简单粗暴的if e ...

  7. 【游戏设计模式】之三 状态模式、有限状态机 Unity版本实现

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接: http://blog.csdn.net/poem_qianmo/article/details/52824776 作者:毛星云(浅 ...

  8. 【游戏设计模式】之三 状态模式 有限状态机 Unity版本实现

     本系列文章由@浅墨_毛星云 出品,转载请注明出处.    文章链接: http://blog.csdn.net/poem_qianmo/article/details/52824776  作者:毛星 ...

  9. Java设计模式之中介者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

最新文章

  1. 解决 EF whereT(func) 查询的一个性能问题
  2. POJ2186:Popular Cows(tarjan+缩点)
  3. oracle中forall in,oracle10g的forall功能加强
  4. 【Qt】数据库实战(二)
  5. C++学习笔记1:virtual 继承
  6. python doc_2019-2020年Python3中文教程完整版.doc
  7. 43 CO配置-控制-产品成本控制-成本对象控制-实际成本核算/物料分类帐-激活实际成本组件划分
  8. 自动驾驶 | 清华车辆与运载学院最新科研成果公布!
  9. Android 升级下载 它们的定义Updates 兼容版本
  10. 学习FLASH CS4(一)
  11. 【Qt+ OpenGL】实现人体3D显示与控制
  12. 开发常用镜像站 - 阿里云镜像站
  13. sql server 审核
  14. 电机驱动电路之H桥基本知识---Trinamic电机驱动芯片
  15. ViewPagerIndicator
  16. 8051单片机Proteus仿真与开发实例-74LS378触发器驱动仿真
  17. 雷达基础系列文章之一:雷达信号的波形、调制形式以及工作模式
  18. GitQ: GitHub 入味儿
  19. CookieLocaleResolver国际化(Springboot)
  20. 联想童夫尧:韬光养晦、空中换引擎,加速企业级市场增长

热门文章

  1. nginx反向代理配置去除前缀
  2. vue一级分类和耳机分类_微服务项目第13天:商品分类业务的实现
  3. parallelstudio license 位置_卫生间这3个位置95%装修没用好
  4. 实时体积云渲染(地平线):一.云的生成
  5. linux设置php时间,修改 linux 时区时间和 php 时区(示例代码)
  6. matlab 1到无穷_从零开始的matlab学习笔记——(6)符号计算与极限
  7. sRGB 和 Adobe RGB 有什么区别?
  8. SSE图像算法优化系列二十一:基于DCT变换图像去噪算法的进一步优化(100W像素30ms)。...
  9. 贝壳金控赵文乐:基于 Spring Cloud 的服务治理实践
  10. Objective-C:NSArray的常见操作