Android常见设计模式:什么是状态模式?

2024-11-19 11:40 Android常见设计模式:什么是状态模式?已关闭评论

Android 开发中的状态模式

1. 什么是状态模式?

状态模式(State Pattern)是一种行为型设计模式,它允许对象在内部状态发生改变时,改变其行为。换句话说,一个对象根据状态不同,表现出不同的行为。

简单类比:
- 假设手机有三种状态:锁屏、解锁、低电量。
在不同状态下,按下音量键的反应可能是:调节音量、无响应或提醒充电。

状态模式通过将状态封装为独立的类,使得状态切换变得简单且易于扩展。


2. 状态模式的核心组成部分

  • Context(上下文类):持有当前状态,负责状态切换并委托操作给当前状态。
  • State(抽象状态接口/类):定义所有状态的共同行为。
  • ConcreteState(具体状态类):实现具体状态下的行为逻辑。

3. UML 类图

以下是状态模式的 UML 结构:
- Context 持有一个 State 的引用。
- 不同的 ConcreteState 实现了 State 的行为。
- 状态切换通过 Context 的方法实现。


4. 代码示例:手机状态切换

实现一个手机的状态切换系统,分别支持 锁屏状态解锁状态低电量状态

// State: 定义状态接口
interface PhoneState {
    void pressPowerButton();
}

// ConcreteState: 锁屏状态
class LockedState implements PhoneState {
    private PhoneContext context;

    public LockedState(PhoneContext context) {
        this.context = context;
    }

    @Override
    public void pressPowerButton() {
        System.out.println("解锁手机");
        context.setState(new UnlockedState(context));
    }
}

// ConcreteState: 解锁状态
class UnlockedState implements PhoneState {
    private PhoneContext context;

    public UnlockedState(PhoneContext context) {
        this.context = context;
    }

    @Override
    public void pressPowerButton() {
        System.out.println("锁屏手机");
        context.setState(new LockedState(context));
    }
}

// ConcreteState: 低电量状态
class LowBatteryState implements PhoneState {
    private PhoneContext context;

    public LowBatteryState(PhoneContext context) {
        this.context = context;
    }

    @Override
    public void pressPowerButton() {
        System.out.println("低电量,功能受限");
    }
}

// Context: 持有状态
class PhoneContext {
    private PhoneState state;

    public PhoneContext() {
        this.state = new LockedState(this); // 初始状态
    }

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

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

// 使用示例
public class StatePatternDemo {
    public static void main(String[] args) {
        PhoneContext phone = new PhoneContext();

        // 锁屏状态 -> 解锁状态
        phone.pressPowerButton();

        // 解锁状态 -> 锁屏状态
        phone.pressPowerButton();

        // 切换到低电量状态
        phone.setState(new LowBatteryState(phone));

        // 低电量状态下按键
        phone.pressPowerButton();
    }
}

输出:

解锁手机
锁屏手机
低电量,功能受限

5. UML 演示简化

以下动画逻辑展示可以更直观:

  1. 手机初始处于“锁屏状态”,按钮按下后状态变为“解锁状态”,显示屏点亮。
  2. 再次按下按钮,状态变为“锁屏状态”,显示屏关闭。
  3. 切换为“低电量状态”,按下按钮显示“低电量警告”。

6. Android 中的实际应用

  1. 播放器的状态管理

    • 状态:播放、暂停、停止。
    • 按钮行为:在不同状态下执行对应的播放或暂停逻辑。
  2. Activity 生命周期管理

    • 状态:onCreateonStartonResume 等。
    • 不同生命周期执行不同的逻辑处理。
  3. 网络状态管理

    • 状态:在线、离线、限速模式。
    • 对应网络行为动态调整。

7. 总结与记忆技巧

状态模式的核心是 “将状态行为与对象分离”,方便扩展。
记忆口诀:
状态分离行为变,切换扩展很自然。

当前文章价值2.67元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)

你可能感兴趣的文章

来源:每日教程每日一例,深入学习实用技术教程,关注公众号TeachCourse
转载请注明出处: https://teachcourse.cn/3712.html ,谢谢支持!

资源分享

Android工程师自我介绍模板 Android工程师自我介绍模板
SQLServer存储过程关于公用表表达式(CTE)和临时表的实例教程 SQLServer存储过程关于公用表
ubuntu中创建Python虚拟环境 ubuntu中创建Python虚拟环境
TreeMap方法解析 TreeMap方法解析

评论已关闭!