设计模式GOF23——状态模式

状态模式(state),是一种行为性模型,行为型模式关注的是系统中对象之间的相互交互,解决系统在运行时对象之间的相互通信和协作,进一步明确对象的职责。相比来说,创建型模式关注对象的创建过程,结构型模式关注对象和类的组合关系。

模式的职责

一个对象有很多状态,不同的状态需要不同的处理的时候需要一个模式来统一管理,状态模式的职责就是管理这种情况。
用于解决系统中复杂对象的状态沌河以及不同状态下行为的封装问题。

模式的结构

Context环境类:环境类中维护一个State对象,他是定义了当前的状态。
State抽象状态类
ConcreteState具体状态类:每一个类封装了一个状态对应的行为。

模式的实现

//State抽象状态类,这里定义状态需要实现的方法
public interface State {
    void handle();
}
//ConcreteState具体状态类:每一个类封装了一个状态对应的行为。
class smallClient implements State{

    public void handle() {
        //具体状态对应的方法和逻辑
        System.out.println("我是小额用户");
    }

}
//ConcreteState具体状态类:每一个类封装了一个状态对应的行为。
class bigClient implements State{

    public void handle() {
        //具体状态对应的方法和逻辑
        System.out.println("我大额用户");
    }

}
//Context环境类:环境类中维护一个State对象,他是定义了当前的状态。
public class Context {
    //把状态对象私有化
    private State state;
    //设置状态的方法必须有,但具体实现不一定
    //根据状态本身设置状态
    public void setState(State state){
        this.state = state;
        //状态方法的调用,一般另外写一个方法,这里为了方便写在这里
        state.handle();
    }
    //也可以根据其他的值设置状态
    public  void setState(double number){
        //这里只是简单的例子,当然可以传复杂的对象,也能有复杂的判断
        if(number<100000){
            this.state = new smallClient();
        }else{
            this.state = new bigClient();
        }
        //状态方法的调用,一般另外写一个方法,这里为了方便写在这里
        state.handle();
    }
}
//客户端调用
public class Client {

    public static void main(String[] args) {
        //创建环境对象
        Context t = new Context();
        //设置状态引用状态方法(两者可以分离也可以放在一起,一般是分离的。)
        t.setState(2000);
    }

}

模式的应用

开发中很多对象会根据对象不同的状态来进行不同的操作,这个时候可以使用状态模式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值