首页 > 其他分享 >Android 状态模式 接口的调用(interface)

Android 状态模式 接口的调用(interface)

时间:2023-11-24 11:05:19浏览次数:40  
标签:状态 Log tvController void 接口 TAG interface Android public



文章目录

  • 1、状态模式介绍
  • 2、状态模式的定义
  • 3、状态模式的使用场景
  • 4、状态模式的UML 类图
  • 5、状态模式的简单示例
  • 6、代码结构
  • 1) TvStateOperate 接口文件
  • 2)、PowerOnState 开机状态下操作
  • 3)、PowerOffState 关机状态下 操作过程
  • 4)、PowerController 电视状态设定接口
  • 5)、TvController 设定电视状态 传递参数
  • 6、 MainActivity 文件
  • 7)、log 打印


1、状态模式介绍

状态模式的行为是由状态决定的,不同的状态有不同的行为。

2、状态模式的定义

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

3、状态模式的使用场景

(1)一个对象的行为取决于他的状态,并且它必须在运行时根据状态来改变行为。
(2)代码中包含了大量与对象有关的语句,if-else switch-case

4、状态模式的UML 类图

Android 状态模式 接口的调用(interface)_ide

1)、Context:环境类,定义客户感兴趣的接口,维护一个State 子类的实例,这个实例定义了对象的当前状态。

2)State: 抽象状态类,或者状态接口,定义一个或者一组接口,表示该状态下的行为。

3)ConcreteStateA、ConcreteStateB: 具体状态类,每一个具体的状态类实现抽State 中定义的接口,从而达到不同状态下的不同行为。

5、状态模式的简单示例

我们就以电视遥控器为例来演示状态模式的实现,我们简单将电视的状态分为:
开机状态 、 关机状态

再 开机状态 下通过遥控器进行 频道的切换、调整音量等都是有效的。
在 关机状态 下通过遥控器进行 频道的切换、调整音量等都是无效的。

6、代码结构

Android 状态模式 接口的调用(interface)_ubuntu_02

1)TvStateOperate 接口,定义了对遥控器的操作方法
2)PowerOnState  添加 TvStateOperate 接口,复写 电视打开状态下的操作方法
3)PowerOffState  添加 TvStateOperate 接口,复写 电视关闭状态下的操作方法
4)PowerController 接口,定义了对电视状态的设定 开机 、 关机
5)TvController 添加 PowerController 接口,对电视状态进行 设定,传递 状态参数
6)MainActivity 对电视进行操作

1) TvStateOperate 接口文件
package com.example.ubuntu.mystateinterface;


//电视状态接口,定义了电视操作的函数
public interface TvStateOperate {
    public void nextChannel();
    public void prevChannel();
    public void turnUp();
    public void turnDown();
}
2)、PowerOnState 开机状态下操作
package com.example.ubuntu.mystateinterface;

import android.util.Log;

public class PowerOnState implements TvStateOperate {

    private String TAG = "PowerOnState: ";

    @Override
    public void nextChannel() {
        Log.i(TAG,"前往下一频道");
    }

    @Override
    public void prevChannel() {
        Log.i(TAG,"前往上一频道");

    }

    @Override
    public void turnUp() {
        Log.i(TAG,"不可用 电视已经是打开状态");
    }

    @Override
    public void turnDown() {
        Log.i(TAG,"关闭电视");

    }
}
3)、PowerOffState 关机状态下 操作过程
package com.example.ubuntu.mystateinterface;


import android.util.Log;

//关机状态,此时只有开机的功能可以使用
public class PowerOffState implements TvStateOperate {
    private String  TAG = "PowerOffState: ";

    @Override
    public void nextChannel() {
        Log.i(TAG,"下一频道不可用");
    }

    @Override
    public void prevChannel() {
        Log.i(TAG,"前一频道不可用");

    }

    @Override
    public void turnUp() {
        Log.i(TAG,"电视打开");

    }

    @Override
    public void turnDown() {
        Log.i(TAG,"不可用电视已经是关闭状态");

    }
}
4)、PowerController 电视状态设定接口
package com.example.ubuntu.mystateinterface;

public interface PowerController {

    public void powerOn();
    public void powerOff();

}
5)、TvController 设定电视状态 传递参数
package com.example.ubuntu.mystateinterface;

import android.util.Log;

public class TvController implements PowerController {

    private String TAG = "TvController: ";
    private TvStateOperate tvStateOperate;


    public void setTvState(TvStateOperate tvState){
        this.tvStateOperate = tvState;
    }


    @Override
    public void powerOn() {
    setTvState(new PowerOnState());
        Log.i(TAG,"开机了");
    }

    @Override
    public void powerOff() {
        setTvState(new PowerOffState());
        Log.i(TAG,"关机了");
    }

    public void nextChannel(){
        tvStateOperate.nextChannel();
    }

    public void preChannel(){
        tvStateOperate.prevChannel();
    }

    public void turnUp(){
        tvStateOperate.turnUp();
    }

    public  void turnDown(){
        tvStateOperate.turnDown();
    }
}
6、 MainActivity 文件
package com.example.ubuntu.mystateinterface;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private String TAG = "MainActivity: ";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        TvController tvController = new TvController();

        tvController.powerOn();     //设置开机状态
        tvController.nextChannel();//下一频道
        tvController.preChannel();//前一频道
        tvController.turnUp(); //开机
        tvController.turnDown(); //关机


        tvController.powerOff();//设置关机状态
        tvController.nextChannel();//下一频道
        tvController.preChannel();//前一频道
        tvController.turnDown(); //关机
        tvController.turnUp(); //开机
    }
}
7)、log 打印

Android 状态模式 接口的调用(interface)_ide_03

文献参考:
Android 源码设计模式解析与实战 第二版

本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。


标签:状态,Log,tvController,void,接口,TAG,interface,Android,public
From: https://blog.51cto.com/u_15866638/8546087

相关文章

  • Android 责任链模式
    文章目录1、责任链模式简介2、责任链的定义3、责任链的使用场景4、责任链模式的UML类图5、责任链模式的简单实现1)示例简介2)示例分析3)代码结构4)Leader文件5)GroupLeader文件6)、Director文件7)、Manager文件8)Boss文件9)、MainActivity文件10)打印log1、责任链模式简介将每个节......
  • interface 接口回调简单模板
    文章目录1、功能简介2、MainActivity文件3、Message文件4、log打印1、功能简介方便在不同类,不同activity之间进行数据传递文件结构:Mainactvity向Message里面传数据,Message处理后,通过接口将处理过后的数据返回到MainActivity2、MainActivity文件packagecom.example.ubun......
  • Android 策略模式 接口的调用
    文章目录1、策略模式介绍2、使用场景3、UML类图4、策略模式的简单实现1)文件结构2)CalculateStrategy接口文件3)BusStrategy公交收费策略4)地铁收费策略5)MainActivity调用不同收费策略6)log打印1、策略模式介绍1)实现某一功能可能会有不同的算法,不同的策略。我们根据不同的实际情......
  • Android widget简介及demo
    文章目录1、简介2、文件结构3、res->xml->appwidget_info.xml4、main_activity.xml5、AndroidManifest.xml6、MyWidget.java7、WidgetService.java8、MainActivity.java1、简介实现桌面小部件2、文件结构1)appwidget_info.xml定义了widget一些属性2)AndroidManifest.xml定义w......
  • Android 动态申请 权限 permission
    文章目录1、单个权限动态申请1)文件结构2)在AndroidManifest.xml添加权限3)在代码里进行权限检查和申请2、多个权限动态申请1)在AndroidManifest.xml添加权限2)、CheckPermission文件3)在MainActivity文件里面调用CheckPermission1、单个权限动态申请以SD卡读写权限......
  • Android典型技术模块开发详解 pdf 资料
    文章目录1、介绍2、章节介绍1、介绍Android典型技术模块开发详解适合刚步入Android开发的工作者,对于Android各个模块能够很好、很全面的讲解。2、章节介绍Android典型技术模块开发详解pdfAndroid典型技术模块开发详解代码文献参考:《Android典型技术模块开发详解》......
  • Android MVC 模式的介绍 与 实战
    文章目录1、mvc框架图2、MVC在Android模式里的实现4、小结1、mvc框架图经典的mvc模式如图所示1)Model(模型层)在MVC中Model一般用来保存数据的状态,比如数据存储,网络请求。同时还与View存在一定的耦合,通过某种事件机制(比如观察者模式)通知View状态的改变来让view更......
  • Android 抽象工厂模式
    文章目录1、抽象工厂模式介绍2、抽象工厂模式的定义3、抽象工厂模式的使用场景4、抽象工厂模式的简单实现5、小结1、抽象工厂模式介绍抽象工厂模式也是创建型模式之一,抽象工厂模式起源于对不同操作系统的图形化解决方案,如不同操作系统的按钮和文本框控件及其实现。2、抽象工厂模......
  • Android 工厂方法模式
    文章目录1、工厂方法模式介绍2、工厂方法模式的定义3、使用场景4、模式的简单实现1、工厂方法模式介绍工厂方法模式(FactoryPattern),是创建型设计模式之一。工厂方法模式是一个结构比较简单的模式。2、工厂方法模式的定义就是一个用于创建对象的接口,让子类来决定实体化那个类。3......
  • Android 单例模式
    文章目录1、单例模式介绍2、单例模式的简单例子3、懒汉模式实现单例模式4、DoubleCheckLock(DLC)实现单例5、静态内部类单例模式6、枚举单例7、使用容器是实现单例模式1、单例模式介绍据说在一个app中,单例对象的类必须保证只有一个实例存在,系统只有一个全局变量存在。2、单......