白话-23种设计模式17-状态模式
【摘要】 一、白话 每个人都有生气,开心和郁闷等状态,在这些状态下即使做同一件事也会有一不同的结果。即状态模式的一种应用二、定义 类的行为是基于它的状态改变的。 抽象状态角色:提供一个方法封装上下文对象的状态。 具体状态角色:继承抽象状态类,实现状态下的行为。 上下文角色:负责对具体状态进行切换三、示例// 状态行为public interface MoodState { void w...
一、白话
每个人都有生气,开心和郁闷等状态,在这些状态下即使做同一件事也会有一不同的结果。即状态模式的一种应用
二、定义
类的行为是基于它的状态改变的。
抽象状态角色:提供一个方法封装上下文对象的状态。
具体状态角色:继承抽象状态类,实现状态下的行为。
上下文角色:负责对具体状态进行切换
三、示例
// 状态行为
public interface MoodState {
void work();
void changeState();
}
public class Angry implements MoodState {
Person person;
public Angry(Person person) {
this.person = person;
}
@Override
public void work() {
System.out.println("我很生气的工作着");
}
@Override
public void changeState() {
System.out.println("工作很充实,我很开心");
person.setState(new Happy(person));
}
}
public class Happy implements MoodState {
Person person;
public Happy(Person person) {
this.person = person;
}
@Override
public void work() {
System.out.println("我很开心的工作着");
}
@Override
public void changeState() {
System.out.println("工作很累,我很生气");
person.setState(new Angry(person));
}
}
// 状态管理
public class Person {
// 当前状态
private MoodState state;
public MoodState getState() {
return state;
}
public void setState(MoodState state) {
this.state = state;
}
// 工作
public void work() {
state.work();
state.changeState();
}
}
输出示例:
我很开心的工作着
工作很累,我很生气
我很生气的工作着
工作很充实,我很开心
我很开心的工作着
工作很累,我很生气
我很生气的工作着
工作很充实,我很开心
我很开心的工作着
工作很累,我很生气
我很生气的工作着
工作很充实,我很开心
四、总结
特点:消除if else巨大条件语句块。封装状态行为。新增状态容易。结构复杂。开闭不支持。状态类过多。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)