美文网首页
设计模式——状态模式

设计模式——状态模式

作者: SeptemberWei | 来源:发表于2019-08-29 14:16 被阅读0次

在设计模式中有一种设计模式是状态模式,这种模式的意思就是对象的行为动作会根据其自身状态的改变而改变,在Android开发中我们经常会遇到一些UI组件需要根据不同的状态来进行变化,下面我就记录一下状态模式的简单设计与实现。
我这里以UI空间需要根据蓝牙的连接状态改变而改变来做示例。
首先我们需要定义一个状态接口,该接口定义了蓝牙的几种状态

public interface State {
    /**
     * 蓝牙连接,读取数据中
     */
    public void connectLoading();

    /**
     * 蓝牙连接,数据读取完成
     */
    public void connectCommplete();

    /**
     * 蓝牙未连接
     */
    public void disConnect();

    /**
     * 搜索中
     */
    public void searching();
}

根据以上接口接下来我们需要实现蓝牙的几种状态:
第一种是:蓝牙连接,读取数据中的状态


public class ConnectLoadingState implements State {
    private BluetoothState bluetoothState;

    public ConnectLoadingState(BluetoothState bluetoothState) {
        this.bluetoothState = bluetoothState;
    }

    @Override
    public void connectLoading() {
        bluetoothState.getOne().setVisibility(View.GONE);
        bluetoothState.getTwo().setVisibility(View.GONE);
        bluetoothState.getThree().setVisibility(View.VISIBLE);
    }

    @Override
    public void connectCommplete() {

    }

    @Override
    public void disConnect() {

    }

    @Override
    public void searching() {

    }

第二种是:蓝牙连接,数据读取完成的状态

public class ConnectCompleteState implements State {
    private BluetoothState bluetoothState;

    public ConnectCompleteState(BluetoothState bluetoothState) {
        this.bluetoothState = bluetoothState;
    }

    @Override
    public void connectLoading() {

    }

    @Override
    public void connectCommplete() {
        bluetoothState.getOne().setVisibility(View.VISIBLE);
        bluetoothState.getTwo().setVisibility(View.GONE);
        bluetoothState.getThree().setVisibility(View.GONE);
    }

    @Override
    public void disConnect() {

    }

    @Override
    public void searching() {

    }
}

第三种是:蓝牙未连接的状态

public class DisConnectState implements State {
    private BluetoothState bluetoothState;

    public DisConnectState(BluetoothState bluetoothState) {
        this.bluetoothState = bluetoothState;
    }

    @Override
    public void connectLoading() {
        
    }

    @Override
    public void connectCommplete() {

    }

    @Override
    public void disConnect() {
        bluetoothState.getOne().setVisibility(View.GONE);
        bluetoothState.getTwo().setVisibility(View.GONE);
        bluetoothState.getThree().setVisibility(View.GONE);
    }

    @Override
    public void searching() {

    }

第四种是:搜索中的状态

public class SearchingState implements State {
    private BluetoothState bluetoothState;

    public SearchingState(BluetoothState bluetoothState) {
        this.bluetoothState = bluetoothState;
    }

    @Override
    public void connectLoading() {

    }

    @Override
    public void connectCommplete() {

    }

    @Override
    public void disConnect() {

    }

    @Override
    public void searching() {
        bluetoothState.getOne().setVisibility(View.GONE);
        bluetoothState.getTwo().setVisibility(View.VISIBLE);
        bluetoothState.getThree().setVisibility(View.GONE);
    }

最后我们需要定义一个蓝牙状态的控制类

public class BluetoothState {
    private State mState;

    ConnectLoadingState connectLoadingState;
    ConnectCompleteState connectCompleteState;
    DisConnectState disConnectState;
    SearchingState searchingState;

    View one, two, three;

    public BluetoothState(View one, View two, View three) {
        this.connectLoadingState = new ConnectLoadingState(this);
        this.connectCompleteState = new ConnectCompleteState(this);
        this.disConnectState = new DisConnectState(this);
        this.searchingState = new SearchingState(this);
        this.one = one;
        this.two = two;
        this.three = three;
        this.mState = disConnectState;
    }


    public void connectLoading() {
        mState.connectLoading();
    }

    public void connectCommplete() {
        mState.connectCommplete();
    }

    public void disConnect() {
        mState.disConnect();
    }

    public void searching() {
        mState.searching();
    }

    public View getOne() {
        return one;
    }

    public View getTwo() {
        return two;
    }

    public View getThree() {
        return three;
    }

在控制类中,我们初始化蓝牙的所有状态类,在外部使用的时候直接调用控制类中的相关方法即可改变状态,从而根据状态改变我们的UI界面。
使用这种方式来对界面UI的状态进行控制可以很好的解耦项目提高扩展性,当我们的业务逻辑越来越复杂的时候,这种状态控制的优势就会非常明显。

相关文章

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • 设计模式——状态模式

    设计模式——状态模式 在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 优点: 减少...

  • 设计模式-状态设计模式

    1.定义 对于某个操作,由于其状态的不同,表现出的行为会不同(如遥控器进行音量增加的操作,在电视是开机状态下是可以...

  • 设计模式——状态模式

    前言 设计模式是指导一个程序猿以更好的姿态处理一些问题,而不再像刚学编程的我们,只会使用if-else分支语句,或...

  • 设计模式--状态模式

    基本常识:策略模式与状态模式是双胞胎,在出生时才分开。 假设公司有个糖果机,1当糖果机由糖果,投入25分钱,转动曲...

  • 设计模式——状态模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Patte...

  • 设计模式《状态模式》

    引言   上一节我们说了策略模式。这一节我们讲讲策略模式的双胞胎弟弟:状态模式,这个模式大家可能不常见,也不常用,...

  • 设计模式——状态模式

    定义 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行...

  • 设计模式 - 状态模式

    模式定义 允许一个对象在其内部状态发生改变时改变它的行为。对象看起来似乎修改了它的类。 状态模式(State Pa...

  • 设计模式 ——— 状态模式

    STATE(状态) ———— 对象行为型模式 意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改...

网友评论

      本文标题:设计模式——状态模式

      本文链接:https://www.haomeiwen.com/subject/jsdiectx.html