java状态模式实例解析

状态模式是一种常用的设计模式,常用于软件系统中解决多种状态下行为互异的情况。例如在音视频播放器中多种状态各自对应着不相同的处理,使用状态机可以完美实现解耦。最近在做一个项目的重构,有使用到状态模式,因此写这篇文章分享一下。

1、状态模式概述:

状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Object for States),状态模式是一种对象行为型模式。《设计模式的艺术》

image.png

1)Context(环境类):环境类拥有各种不同状态的对象,作为外部使用的接口,负责调用状态类接口。
2)State(抽象状态):抽象状态既可以为抽象类,也可以直接定义成接口。主要用于定义状态抽象方法,具体实现由子类负责。
3)ConcreteState(具体状态类):具体状态类为抽象状态的实现者,不同的状态类对应这不同的状态,其内部实现也不相同。环境类中使用不同状态的对象时,能实现不同的处理逻辑。

2、状态模式示例:

示例为真实项目,一个即时通讯客户端连接服务端网络的设计。客户端连接服务器时存在多种状态,最初是通过if-else判断来实现,代码耦合度比较高。使用状态设计模式之后,代码清晰很多,耦合降低。类图与上面的基本一样,因此此处不再展示,直接上代码。

public interface ConnectState {
   

    void handleRequest();
}
public class InitState implements ConnectState{
   

    private ConnectMachine connectMachine;

    private boolean connectResult;

    public InitState(ConnectMachine connectMachine) {
        this.connectMachine = connectMachine;
    }

    @Override
    public void handleRequest() {
        doConnect();
        connectMachine.waitingConnect();
    }

    
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值