博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
状态模式-State Pattern(Java实现)
阅读量:5238 次
发布时间:2019-06-14

本文共 2018 字,大约阅读时间需要 6 分钟。

状态模式-State Pattern

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。

State接口

表明状态, 实体类是根据状态的变化而发生响应行为的变化的.

/** * 状态抽象定义 */public interface State {    void onEnterState();    void observe();}

AngryState类

状态的一种实现.

/** * 生气状态 */public class AngryState implements State {    private Mammoth mammoth;    public AngryState(Mammoth mammoth) {        this.mammoth = mammoth;    }    @Override    public void observe() {        System.out.printf("%s 处于暴躁状态!\n", mammoth);    }    @Override    public void onEnterState() {        System.out.printf("%s 开始生气了!\n", mammoth);    }}

PeacefulState类

状态的一种实现.

/** * 平静状态 */public class PeacefulState implements State {    private Mammoth mammoth;    public PeacefulState(Mammoth mammoth) {        this.mammoth = mammoth;    }    @Override    public void observe() {        System.out.printf("%s 现在很平静.\n", mammoth);    }    @Override    public void onEnterState() {        System.out.printf("%s 开始冷静下来了.\n", mammoth);    }}

Mammoth类

本类是状态State的持有者

/** * 猛犸大象 */public class Mammoth {    private State state;    public Mammoth() {        state = new PeacefulState(this);    }    public void timePasses() {        if (state.getClass().equals(PeacefulState.class)) {            changeStateTo(new AngryState(this));        } else {            changeStateTo(new PeacefulState(this));        }    }    private void changeStateTo(State newState) {        this.state = newState;        this.state.onEnterState();    }    public void observe() {        this.state.observe();    }    @Override    public String toString() {        return "猛犸大象";    }}

Main

用于模拟场景以及运行代码

public class Main {    public static void main(String[] args) {        Mammoth mammoth = new Mammoth();        // 看看大象现在是什么状态        mammoth.observe();        // 过了一会儿        mammoth.timePasses();        // 看看大象现在是什么状态        mammoth.observe();        // 过了一会儿        mammoth.timePasses();        // 看看大象现在是什么状态        mammoth.observe();    }}

 运行结果如下:

转载于:https://www.cnblogs.com/noKing/p/9070117.html

你可能感兴趣的文章
作业完成2
查看>>
PHP截取中英文混合字符
查看>>
HTA - OnKeyDown
查看>>
【洛谷P1816 忠诚】线段树
查看>>
CDN 学习笔记
查看>>
电子眼抓拍大解密
查看>>
Linux系统下 /etc/shadow 档案结构
查看>>
多线程---线程间的通信
查看>>
poj 1331 Multiply
查看>>
严重: 文档无效: 找不到语法。 at (null:2:19)
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
nodejs-Path模块
查看>>
P1107 最大整数
查看>>
EasyDarwin开源手机直播方案:EasyPusher手机直播推送,EasyDarwin流媒体服务器,EasyPlayer手机播放器...
查看>>
监控CPU和内存的使用
查看>>
Ubuntu14.04设置开机自启动程序
查看>>
ios app 单元测试 自动化测试
查看>>
年薪二十万
查看>>
强连通tarjan模版
查看>>