Java设计模式之——状态模式

本文介绍了状态模式的基本概念、定义和使用场景,并通过用户登录状态管理的例子详细阐述了如何在Java中实现状态模式。状态模式将对象的行为与状态分离,当状态改变时,对象的行为也随之改变,有效地简化了状态判断逻辑,提高了代码的可扩展性和可维护性。
摘要由CSDN通过智能技术生成

状态方法模式简单介绍

状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。状态模式和策略模式的结构几乎完全一样,但它们的目的、本质却完全不一样。状态模式的行为是平行的、不可替换的,策略模式的行为是彼此独立、可相互替换的。用一句话来表述,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。

状态模式的定义

当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类

状态模式的使用场景

  • (1)一个对象的行为取决于它的状态,并且它必须在运行时根据状态改变它的行为。
  • (2)代码中包含大量与对象状态相关的条件语句,例如,一个操作中含有庞大的多分支语句(if-else 或 switch-case),且这些分支依赖于该对象的状态。

状态模式将每一个条件分支放入一个独立的类中,这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖其他对象而独立变化,这样通过多态来去除过多的、重复的 if-else 等分支语句。

状态模式的 UML 类图

这里写图片描述

角色介绍:

  • Context —— 环境类,定义客户感兴趣的接口,维护一个 State 子类的实例,这个实例定义了对象的当前状态。
  • State —— 抽象状态类或者状态接口,定义一个或者一组接口,表示该状态下的行为。
  • ConcreteStateA、ConcreteStateB —— 具体状态类,每一个具体的状态类实现抽象 State 中定义的接口,从而达到不同状态下的不同行为。

状态模式实战

在开发过程中,我们用状态模式最常见的地方应该是用户登录系统,在用户已登录和未登录的情况下,对于同一事件的处理行为是不一样的,例如,在新浪微博中,用户在未登录的情况下点击转发按钮,此时会先让用户登录,然后在执行转发操作;如果是已登录的情况下,那么用户输入转发的内容后就可以直接进行操作。可见,在这两种状态下,对于转发这个操作的处理动画完全是不一样的,当状态改变时对于转发操作的行为发生了改变。

下面我们用状态模式来简单实现这个过程,首先创建一个 Android 项目,里面含有两个 Activity,分别为 MainActivity、LoginActivity,MainActivity 是应用第一个 Activity,有转发和注销用户功能,LoginActivity 则为用户登录界面。

用户的默认状态为为登录状态,此时用户在 MainActivity 界面点击转发时回先跳转到登录界面,然后在登录界面登录成功后在回到 MainActivity 页面,此时,用户在进行转发操作就可以实现真正的转发功能,

MainActivity 的代码如下:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.forward_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值