状态模式-State Pattern(Java实现)
状态模式-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();
}
}
运行结果如下:

状态模式-State Pattern(Java实现)的更多相关文章
- 二十四种设计模式:状态模式(State Pattern)
状态模式(State Pattern) 介绍允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它所属的类. 示例有一个Message实体类,对它的操作有Insert()和Get()方法, ...
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...
- 十一个行为模式之状态模式(State Pattern)
定义: 当一个对象有多个状态,并且在每个状态下有不同的行为,可以使用状态模式来在其内部改变状态时改变其行为,而客户端不会察觉状态的改变,仍使用同样的方法或接口与对象进行交互. 结构图: Context ...
- 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)
说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对“状态模式”并不陌生,因为我们之前使用到了状态模式进行重构.上一篇博客我们 ...
- 【UE4 设计模式】状态模式 State Pattern
概述 描述 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类. 其别名为状态对象(Objects for States),状态模式是一种对象行为型模式. 有限状态机(FSMs) ...
- 状态模式(State Pattern)
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂 ...
- C#设计模式——状态模式(State Pattern)
一.概述在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为.如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代码结构 ...
- [设计模式] 20 状态模式 State Pattern
在GOF的<设计模式:可复用面向对象软件的基础>一书中对状态模式是这样说的:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类.状态模式的重点在于状态转换,很多时候,对 ...
- php状态模式(state pattern)
... <?php /* The state pattern encapsulates the varying behavior for the same object based on its ...
随机推荐
- 导入虚拟机vmware,此主机支持Intel VT-x,但Intel VT-x处于禁用状态和黑屏
解决方法:进入BIOS(按什么键进入bios,需要看你用什么电脑),把Intel Virtualization Technology 设置enabled 然后是黑屏解决方法:管理员模式 ...
- 简单的C#实体映射 AutoMapper
AutoMapper是对象到对象的映射工具.在完成映射规则之后,AutoMapper可以将源对象转换为目标对象. 要映射实体 public class SourceModel { public int ...
- C# -- 使用 Task 执行多线程任务
C# -- 使用 Task 执行多线程任务 1. 使用 Task 执行多线程任务 class Program { static void Main(string[] args) { Task task ...
- C# 中如何判断字符串的相似度
基于 F23.StringSimilarity.dll 组件.Github 上可以搜索到该组件. 核心方法: var l = new Levenshtein(); double tempValue ...
- AppCan移动开发技巧:3步走,获取移动APP签名信息
大家知道,在移动APP开发里,与应用包名一样,应用的签名信息需是唯一的,否则将会出现应用冒领.重复安装等问题.之前分享过安卓应用的签名如何获取(点击查看),这里将继续以AppCan平台为例,分享如何获 ...
- mysql数据库中插入数据INSERT INTO SET的优势
往mysql数据库中插入数据.以前常用 INSERT INTO 表名 (列名1,列名2…) VALUES(列值1,列值2); 如果在PHP程序中,就会写成如下示例(往商品库里增加商品) $sql = ...
- [转帖]流程控制:for 循环
流程控制:for 循环 http://wiki.jikexueyuan.com/project/linux-command/chap34.html need more study need more ...
- .Net上传图片的一些问题
1.IIS上传文件大小限制和上传时间限制 异常详细信息: System.Web.HttpException: 超过了最大请求长度 打开iis找到部署的网站的配置编辑器 2.设置上传时间限制 3.设置上 ...
- EntityFrameworkCore中的OnModelCreating
在我们使用EntityFrameworkCore作为数据库ORM框架的时候,不可避免的要重载DbContext中的一个虚方法OnModelCreating,那么这个方法到底是做什么的?到底有哪些作用呢 ...
- Word技巧设置
1.如何在Word中快速输入上下标 下标~~同时按住:Ctrl 和 =键: 上标~~同时按住:Ctrl 和 Shift 和 +键: 2.如何删除Word中产生的空白页 设置 段落 中的 固定值 ...