zoukankan      html  css  js  c++  java
  • 抽象接口的过程小结

    今天做项目的时候遇到需求顺便小结下自己抽象为接口定义共同拥有的抽象方法:

    1.需求:

    在MainActivity中通过一个广播(单独的一个文件类)来监听传感器是否插入。拔出,重写广播的onReciver方法,

    推断status(连接状态)获得Context对象,转换为MainActivity然后调用MainActivity连接成功的方法和拔出方法

    更新MainActivity相关的UI或数据

    2.分析:

    (1)考虑到其它多个页面也可能须要监听传感器是否插入也就是仅仅有连接上和未连接上两种状态(connected和unConnected)

    (2)每一个界面须要更新的UI或数据可能不同

    (3)为了复用一个广播类

    3.方法:

    (1)创建IHeadxxx接口包含connected()和unConnected()抽象方法

    (2)在MainActivity和要注冊监听传感器是否插的Activity类实现IHeadxxx接口重写connected()和unConnected()抽象方法

    完毕对应的操作

    总结:有时候知道有多个类要必需要做相同的事,可是详细做什么又不知道,接口体现的是一种能力一种约定

    先写到这里有时间再贴代码

    代码片段:

    接口:

    IHeadsetPlugStates.java

    /**
     * 设备连接状态的监听的Activity须要实现这个接口
     * @author lqm
     *
     */
    public interface IHeadsetPlugStates{  
    /**
    * 连接成功的方法
    */
    public void conected();
    /**
    * 未连接或者拔出或连接失败等
    */
    public void unConected();

    }  

    广播类:

    HeadsetPlugReceiver.java

    /**
     * 监听设备是否连接
     *
     */
    public class HeadsetPlugReceiver extends BroadcastReceiver {  


    @Override  
    public void onReceive(Context context, Intent intent) {  
    if(intent.hasExtra("state")){  
    if(intent.getIntExtra("state", 0)==0){  
    if(context instanceof IHeadsetPlugStates){
    IHeadsetPlugStates main= (IHeadsetPlugStates) context;
    main.unConected();
    }else{
    try {
    throw new Exception("监听设备未实现HeadsetPlugReceiver接口,请实现HeadsetPlugReceiver接口");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }  
    else if(intent.getIntExtra("state", 0)==1){  
     
    if(context instanceof IHeadsetPlugStates){
    IHeadsetPlugStates main=(IHeadsetPlugStates) context;
    main.conected();
    }else{
    try {
    throw new Exception("监听设备未实现HeadsetPlugReceiver接口。请实现HeadsetPlugReceiver接口");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }  
    }  
    }  



    }  



    MainActivity.java

    public class MainActivity extends Activity implements IHeadsetPlugStates {

    /**
    * 未连接或者拔出或连接失败等
    */
    @Override
    public void unConected() {
    tvState.setText(R.string.index_bttom_lable2_fail);
    liConnectlayout.setVisibility(View.GONE);
    reUnConnectlayout.setVisibility(View.VISIBLE);
    setValueOfElectricity(0);
    isConnect=false;
    fistgetPover=false;
    }

    /**
    * 连接成功的方法
    */
    @Override
    public void conected() {

    。。。

    }


    }



  • 相关阅读:
    理解jquery的$.extend()、$.fn和$.fn.extend()
    Angularjs,WebAPI 搭建一个简易权限管理系统
    ASP.NET MVC Boilerplate简介
    写jQuery插件
    给Asp.Net MVC及WebApi添加路由优先级
    Oracle数据库之开发PL/SQL子程序和包
    Git 1.9.5.msysgit.1
    快速解读GC日志(转)
    Git & Github 一页简明笔记(转)main
    用python3.x与mysql数据库构建简单的爬虫系统(转)
  • 原文地址:https://www.cnblogs.com/tlnshuju/p/7299333.html
Copyright © 2011-2022 走看看