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;
} }

状态类: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 {

    @Override
public void smile() {
// happy smile } @Override
public void cry() {
// happy cry } @Override
public void say() {
// happy say } }

UnHappyState.java (不高兴状态)

package com.cy.dp.state;

public class UnHappyState extends State {

    @Override
public void smile() {
// unhappy smile } @Override
public void cry() {
// unhappy cry } @Override
public void say() {
// unhappy say } }

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模式。
当然, 你说我不同的策略使用不同的方法,哭的策略使用哭的方法,高兴的策略用高兴的方法,也能说得过去;所以在这点上不要咬文嚼字。理解它是什么意思就够了;
 
 

java设计模式-State模式的更多相关文章

  1. Java设计模式——组合模式

    JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...

  2. java设计模式--单列模式

    java设计模式--单列模式 单列模式定义:确保一个类只有一个实例,并提供一个全局访问点. 下面是几种实现单列模式的Demo,每个Demo都有自己的优缺点: Demo1: /** * 单列模式需要满足 ...

  3. 3.java设计模式-建造者模式

    Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...

  4. Java设计模式-代理模式之动态代理(附源代码分析)

    Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...

  5. Java设计模式——外观模式

    JAVA 设计模式 外观模式 用途 外观模式 (Facade) 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式是一种结构型模式. 结构

  6. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  7. 【设计模式】Java设计模式 - 原型模式

    [设计模式]Java设计模式 - 原型模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...

  8. 【设计模式】Java设计模式 - 桥接模式

    [设计模式]Java设计模式 - 桥接模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...

  9. 【设计模式】Java设计模式 - 组合模式

    Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

随机推荐

  1. PTA——猴子吃桃

    PTA 7-35 猴子吃桃问题 #include<stdio.h> int main() { ; scanf("%d",&n); ; i<n; i++) ...

  2. 服务器-华为RH2288H V3-Server 2008R2忘记登录密码操作方法

    1.插入PE盘,重启服务器. 下载地址:http://pan.baidu.com/s/1c16cP6C 密码: 18hq 注:这是支持全系列阵列卡的专用服务器PE工具,市面上的绝大多数PE在服务器中都 ...

  3. Liunx----vi编辑器

    关于vi编辑器基本的用法总结如下: vi是linux下的一款文编编辑器. 进入vi的方法:在系统启动起来后,直接键入vi或vi 文件名: 进去后输入内容方法:输入a或i,切换到编辑模式: 退出编辑模式 ...

  4. LeetCode - Number of Distinct Islands

    Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...

  5. 【BZOJ3242】【UOJ#126】【NOI2013】快餐店

    NOI都是这种难度的题怎么玩嘛QAQ 原题: 小T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方. ...

  6. 一个License的所带来问题

    在维护一个老产品时发现一个License的问题.产品是用Z80 Z8F6423, compiler用的是ZDS II Z8 Encode! 4.9.0. 由于有一个Bug要修复,所以我重新检查了一下它 ...

  7. MySql安装完成后,Navicat连接不上的问题

    Navicat连接mysql8.0.1版本出现1251--Client does not support authentication protocol requested by server的解决 ...

  8. webpack 学习资料

    webpack 学习资料 webpack 学习资料 网址 webpack 中文版 https://webpack.docschina.org/configuration/dev-server/

  9. hbase java 基本例子

    一下代码实用  0.99.0 以后的版本. package hadoop; import java.io.IOException; import java.util.ArrayList; import ...

  10. RSA 加密算法 Java 公钥加密私钥解密 和 私钥加密公钥解密 的特点

    package com.smt.cipher.unsymmetry; import org.apache.commons.codec.binary.Base64; import org.apache. ...