状态设计模式

本文介绍了状态设计模式的概念,通过TCP连接的状态变化来阐述其应用。状态设计模式使得对象在不同状态下能表现出不同的行为,避免了大量if-else语句。文中展示了Context、State接口和ConcreteState实现类的角色划分,并提供了代码示例。状态模式虽然初期可能增加复杂性,但在业务扩展时能提高代码的可维护性和扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

兄弟们好,今天我们来学习一下状态设计模式。

它的定义是:一个对象在不同的状态可以显示不同的动作,比如,在公司我们是打工人,在家里我们是老公,在教室我们是老师,因为我们的所处的环境不同而导致我们拥有不同的动作行为。这就是状态设计模式。

我们在日常学习中这种状况很常见,比如TCP连接建立和销毁的过程,从不同的状态进行迁移,而表现出来地动作也不相同,又如一个线程的的状态,从五个状态不断地切换。

我们来看一下它的类图实现

通过TCPConnection状态的不断改变,引发其State状态的改变,因而导致其输出的结果改变。

我们来看一下它的角色组成:

  • Context,用户使用的对象,内部保存有该对象的状态
  • State,该对象的状态的抽象描述
  • ConcreteState,对象状态的具体描述

接下来我们来看一下它的代码实现:

Context

class TCPConnection{
    private State state ;

    public TCPConnection(State state){
        this.state = state ;
    }

    public void open(){
        state.open();
    }
    public void close(){
        state.close();
    }
}

State状态描述

interface State{
    void open();
    void close();
}

具体的状态描述

class TCPEstablished implements State{

    @Override
    public void open() {
        System.out.println("当前状态为正在建立连接状态");
    }

    @Override
    public void close() {

    }
}

class TCPListened implements State{
    @Override
    public void open() {
        System.out.println("当前状态为监听状态");
    }

    @Override
    public void close() {

    }
}

class TCPClosed implements State{
    @Override
    public void open() {
        System.out.println("当前状态为关闭状态");
    }

    @Override
    public void close() {

    }
}

看完上面的代码,兄弟们是不是感觉状态设计模式就是一个解决选择语句的过程,因为不同的行为而产生不同的动作,这难道不就是我们常见的if|switch

if("established".equals(tcpConnection.state)){
            
}else if("listened".equals(tcpConnection.state)){
            
}else if("cloesed".equals(tcpConnection.state)){
            
}

我一手if|else不香嘛,搞那么麻烦干嘛,好啦,兄弟们该说出那句话了,方便扩展,设计模式往往会将一个问题复杂化,进行结构的拆分,但随着业务的不断扩大,它的好处也会出现,方便维护和扩展。

好啦,兄弟们。今天的设计模式就到这里了,兄弟们,晚安。明天也是美好的一天呢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值