状态设计模式

本文介绍了状态模式的概念及其在软件设计中的应用。通过一个简单的例子展示了如何使用状态模式来实现对象内部状态的变化,进而改变其行为。同时,对比了状态模式与策略模式的不同之处。

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

状态模式允许一个对象在其内部状态改变的时候改变其行为。他把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。

/**
 * 环境角色
 */
public class Context {

    private State state;

    public void setState(State state) {
        this.state = state;
    }

    public void sampleOperation() {
        state.sampleOperation();
    }
}

 

/**
 * 抽象状态角色
 */
public interface State {
    public void sampleOperation();
}

 

/**
 * 具体状态角色
 */
public class ConcreteState1 implements State{

    public void sampleOperation() {
        System.out.println("ConcreteState1");
    }
}

 

/**
 * 具体状态角色
 */
public class ConcreteState2 implements State {
    public void sampleOperation() {
        System.out.println("ConcreteState2");
    }
}

 

public class Client {

    public static void main(String[] args) {
        Context context = new Context();
        ConcreteState1 concreteState1 = new ConcreteState1();
        ConcreteState2 concreteState2 = new ConcreteState2();

        context.setState(concreteState1);
        context.sampleOperation();

        context.setState(concreteState2);
        context.sampleOperation();
    }
}

 

状态模式和策略模式的区别:

一个简单的方法就是考察环境角色是否有明显的状态和状态过滤。如果环境只有一个状态,那么就应当使用策略模式。

而状态模式则适用于另一种情况,即环境角色有明显的转移。

另一个是策略模式的环境类自己选择一个具体策略类,而状态模式的环境类是被外在原因放在一个具体状态中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值