1.背景:                    

MM的状态是非常不固定的,说不定刚才还非常高兴,没准一会就生气了。就跟六月的天似的,说变就变。
封装一下MM的状态:smile,cry,say;MM的状态决定了这些方法该怎么执行.
2.代码:                    
Boy.java:

package com.cy.dp.state;public class Boy {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}

View Code

状态类:State.java(抽象类,具体实现交给子类)

//状态类
public abstract class State {public abstract void smile();public abstract void cry();public abstract void say();
}

HappyState.java (高兴状态)

package com.cy.dp.state;public class HappyState extends State {@Overridepublic void smile() {// happy smile
        }@Overridepublic void cry() {// happy cry
        }@Overridepublic void say() {// happy say
        }}

View Code

UnHappyState.java (不高兴状态)

package com.cy.dp.state;public class UnHappyState extends State {@Overridepublic void smile() {// unhappy smile
        }@Overridepublic void cry() {// unhappy cry
        }@Overridepublic void say() {// unhappy say
        }}

View Code

MM.java:

package com.cy.dp.state;public class MM {private String name;private State state = new HappyState();public String getName() {return name;}public void setName(String name) {this.name = name;}public void smile(){state.smile();}public void cry(){state.cry();}public void say(){state.cry();}}

3.小结:              

state用的也并不多;简单用一句话解释,就是:一个类的动作是根据这个类的内部状态的不同,而有不同的动作。
疑问:
1.这跟策略模式有什么区别啊?不同的策略我就怎么执行呗。
2.这不就是一个简单的多态的应用吗?
答:
没错,设计模式很多时候区分这个还是那个,往往是在语义上的区分而不是语法上的区分,比如说这里咱们说清楚了这就是不同的状态下我们执行不同的方法,那就是State模式。
当然, 你说我不同的策略使用不同的方法,哭的策略使用哭的方法,高兴的策略用高兴的方法,也能说得过去;所以在这点上不要咬文嚼字。理解它是什么意思就够了;

转载于:https://www.cnblogs.com/tenWood/p/9136746.html

java设计模式-State模式相关推荐

  1. Java 设计模式——状态模式

    概述 很多人在说状态模式的时候总拿策略模式来进行对比,可能他们的类图会有一点类似,可我却不认为他们有多么相像.你可以阅读<Java设计模式--策略模式>这篇博客,并与本文对比,以找到蛛丝马 ...

  2. Java设计模式——备忘录模式

    Java设计模式--备忘录模式 需求 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状 ...

  3. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  4. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  5. Java设计模式-工厂模式(2)工厂方法模式

    在Java设计模式-工厂模式(1)简单工厂模式 中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而"工厂方法模式"是对简单工厂模式的进一步抽象化,其好处是可以使系统在不 ...

  6. Java设计模式-工厂模式(1)简单工厂模式

    Java设计模式-工厂模式(1)简单工厂模式 一.前言 1)例子 2)类图关系 3)代码实现 二.简单工厂模式 2.1.概述: 2.2.类图关系: 2.3.代码修改: 2.4.优缺点 2.5.扩展-简 ...

  7. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

  8. java设计模式 订阅模式_Java中的外观设计模式

    java设计模式 订阅模式 立面是指建筑物的外观. 当穿过街道时,我们所看到的只是建筑物的外观. 该工作面抽象了建筑物的所有复杂实现细节. 同样, 外观设计模式旨在为子系统中的一组接口提供统一的接口. ...

  9. java设计模式 订阅模式_Java中的复合设计模式

    java设计模式 订阅模式 当我们必须使用对象的树状分层结构时,复合设计模式非常有用. 它使我们能够统一对待单个对象和对象组成. 它属于结构设计模式的范畴,因为它将对象组合成树形结构以表示部分整个层次 ...

  10. java设计模式迭代器模式_迭代器设计模式示例

    java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...

最新文章

  1. input type=file /,美化自定义上传按钮
  2. 系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT
  3. 十大互联网公司都在寻找她!她是什么样的?
  4. (十二)springmvc+mybatis+dubbo+zookeeper分布式架构 整合 - zookeeper注册中心安装
  5. Java知多少(4)J2SE、J2EE、J2ME的区别
  6. Android --- android.view.InflateException: Binary XML file line #7: Binary XML file lin... 类似问题的解决办法
  7. 完全删除垃圾Q+!!!
  8. ZDOzMRVAOq
  9. python matplotlib模块教程_Python中的Matplotlib模块入门教程
  10. 【华为云技术分享】如何设计高质量软件-领域驱动设计DDD(Domain-Driven Design)学习心得
  11. 解决SQL Server 连接时的一些基本问题后的若干初浅心得
  12. edi python_在不从edi运行的情况下调用python函数
  13. python - list 列表推导式
  14. Jquery实现图片的预加载与延时加载
  15. 手工打造迅雷9超精简版
  16. 高斯克吕格投影,将经纬度转换为投影坐标
  17. Python逆波兰表达式
  18. 虚拟主机与云服务器有什么区别,我们应该如何选择
  19. kafka自定义生产者分区器、自定义消费者分区器
  20. Java浅拷贝和深拷贝(一文足矣),及String类型的坑。

热门文章

  1. Win32 编程
  2. SpringMVC——架构,搭建,SSM搭建,POST请求乱码问题,参数转换器
  3. 从44.556677想到的
  4. [BZOJ] 1639: [Usaco2007 Mar]Monthly Expense 月度开支
  5. Could not create ServerSocket on address 0.0.0.0/0.0.0.0:9083
  6. 2015上海网络赛 HDU 5475 An easy problem 线段树
  7. 最新wp建站做淘宝客系统教程(共6课)附源码
  8. 关于输入法的弹出和隐藏
  9. 自己常用的分页SQL
  10. Spark RDD、DataFrame和DataSet的区别