首页 > 其他 > 详细

设计模式--状态模式

时间:2020-02-19 20:54:53      阅读:38      评论:0      收藏:0      [点我收藏+]

状态模式

定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。

核心:用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题

角色

1)   Context环境类:环境类中维护一个State对象,它定义了当前的状态

2)   State抽象状态类

3)   ConcreteState具体状态类:每一个类封装了一个状态对应的行为

图示技术分享图片                      技术分享图片

package com.offcn.designpattern.statepattern;

public class StatepatternDemo {
    public static void main(String[] args) {
        Context c = new Context();
        c.setState(new BookState());
        c.setState(new FreeState());
        c.setState(new InState());
    }
}
//1)    Context环境类
class Context{
    private State state;
    public void setState(State s){
        System.out.println("修改状态中。。");
        this.state = s;
        state.handle();
    }
}
//2)    State抽象状态类
interface State{
    void handle();
}
//3)    ConcreteState具体状态类
class FreeState implements State{

    @Override
    public void handle() {
        System.out.println("房间空闲状态");
    }
}
//3)    ConcreteState具体状态类
class BookState implements State{

    @Override
    public void handle() {
        System.out.println("房间已预定状态");
    }
}
//3)    ConcreteState具体状态类
class InState implements State{

    @Override
    public void handle() {
        System.out.println("房间已入住状态");
    }
}

输出:

技术分享图片

优点

1)状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足“单一职责原则”。

2)减少对象间的相互依赖。将不同的状态引入独立的对象中会使得状态转换变得更加明确,且减少对象间的相互依赖。

3)有利于程序的扩展。通过定义新的子类很容易地增加新的状态和转换。

缺点

1)状态模式的使用必然会增加系统的类与对象的个数。

2)状态模式的结构与实现都较为复杂,如果使用不当会导致程序结构和代码的混乱。

使用场景

1)         银行系统中账户状态的管理

2)         OA系统中公文状态的管理

3)         酒店系统中,房间状态的管理

4)         线程对象各状态之间的切换

 

设计模式--状态模式

原文:https://www.cnblogs.com/bai3535/p/12333002.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!