### 状态模式
当一个对象的内在状态改变时允许其改变其行为,这个对象看起来像是改变了其类。(摘抄)
状态模式主要用于解决状态转换过程中代码过于复杂。把状态的判断逻辑放到用于表示状态的一系列类中去实现。这样就可以把复杂的逻辑判断给省略。
~~~
public class Worker
{
public State state;
public Worker(State state)
{
this.state = state;
}
public void Request()
{
state.handler(this);
}
}
public abstract class State
{
public abstract void handler(Worker worker);
}
public class ConcreteStateA extends State
{
@Override
public void handler(Worker worker) {
// TODO Auto-generated method stub
worker.state = new ConcreteStateB();
}
}
public class ConcreteStateB extends State
{
@Override
public void handler(Worker worker) {
// TODO Auto-generated method stub
worker.state = new ConcreteStateA();
}
}
class Client
{
public static void main()
{
Worker worker = new Worker(new ConcreteStateA());
worker.Request();
}
}
~~~
基本的实现代码就是上面这样了,这个模式相当于把所有与状态转换相关的代码都放到了State类子类的handler函数里面。当你需要增加新的状态的时候十分方便添加。
这个模式首先把每一状态都分开了,互不干扰,其次它们在状态转换的时候也没有用到大量的分支语句,减少了增减功能时意外的发生。
当一个对象的行为取决与它的状态,并且它必须在运行时刻根据状态的改变改变它的行为时,就可以考虑使用状态模式。(摘抄)
- 前言
- (1)代码无错就是优?——简单工厂模式
- (2)商场促销——策略模式
- (3)&(4)&(5) 设计模式原则
- (6)穿什么有这么重要?——装饰模式
- (7)为别人做嫁衣——代理模式
- (8)雷锋依然在人间——工厂方法模式
- (9)简历复印——原型模式
- (10)考题抄错会做也白搭——模板方法模式
- (11)迪米特法则
- (12)牛市股票还会亏钱?—— 外观模式
- (13)好菜每回味不同——建造者模式
- (14)老板回来,我不知道——观察者模式
- java实现事件委托
- (15)就不能不还DB吗?—— 抽象工厂模式
- (16)无尽加班何时休息——状态模式
- (17)在NBA我需要翻译——适配器模式
- (18)如果再回到从前——备忘录模式
- (19)分公司=部门——组合设计模式
- (20)想走?可以!先买票——迭代器模式
- (21)有些类也需计划生育——单例模式
- (22)手机软件何时统一——桥接模式
- (23)烤羊肉串引来的思考——命令模式
- (24)加薪非要老总批?——职责链模式
- (25)世界需要和平——中介者模式
- (26)项目多也别傻做——享元模式
- (28)男人和女人——访问者模式