一切皆对象,接口也能再抽象(Fragment通讯)

先看效果图

1.什么是接口

接口:一种方法与实现分离的结构化的方法
一种完全解耦的方法,也是实现java语言多继承的方法

2.为什么要在抽象接口

Fragment的通讯

3.为什么使用Fragment

Fragment是在android2.3诞生
优点:

  • 1.速度快(出现就是为了解决Activity速度慢)
  • 2.方便管理(fragmentManager复用很高)
  • 3.耦合度低**

    4.Activity与Fragment的通信

    1> Handler通讯方式
    优点:
  • 解决问题,实现通信
    缺点:
  • 1.高耦合(持有对象)
  • 2.无法从Activity获取到返回值
  • 3.内存泄漏

2> 广播方式通信
优点:

  • 1.能够解决问题
  • 2.耦合度低
    缺点:
  • 1.性能差
  • 2.目标不明确
  • 3.代码冗余
    3> EventBus
    优点:
  • 1.简单
  • 2.方便 打哪指哪
    缺点:
  • 1.性能差,大量用到了反射,卡顿
  • 2.代码很难维护(不需要知道代码的逻辑 需要自己看底层源码)
  • 3.数据只能单向传递
    4> 接口
    优点:
  • 1.简单
  • 2.效率高
  • 3.解耦合
    缺点:
  • 如果项目中大量使用接口多得话就不是很好了(命名也会很麻烦)所以需要万能Interface

    5.接口抽象

  • 接口的组成:
    1.接口名 2.函数(函数名 返回值==>可变 参数==>可变) 3.空的函数体
    函数分为4种:

  • 有参数无返回值
  • 有参数有返回值
  • 无返回值有参数
  • 无参数无返回值

    6.代码

    1.定义Function
package com.zhang.yu.struct;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:抽取接口中共有部分 函数名
 */

public abstract class Function {

    public String mFunctionName;
    public Function(String name){
        this.mFunctionName = name;
    }
}复制代码

2.无参无返回值

package com.zhang.yu.struct;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:无参无返回值
 */

public abstract class FunctionNoParamNoResult extends Function {

    public FunctionNoParamNoResult(String name) {
        super(name);
    }

    public abstract void function();//无参无返回值
}复制代码

2.有返回值有参数

package com.zhang.yu.struct;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:有返回值有参数
 */

public abstract class FunctionAndParamNoResult<Param> extends Function {
    public FunctionAndParamNoResult(String name) {
        super(name);
    }

    public abstract String function(Param data);
}复制代码

3.无参数有返回值

package com.zhang.yu.struct;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:无参数有返回值
 */

public abstract class FunctionNoParamAndResult<Result> extends Function {
    public FunctionNoParamAndResult(String name) {
        super(name);
    }

    public abstract Result function();
}复制代码

4.无参无返回值

package com.zhang.yu.struct;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:无参无返回值
 */

public abstract class FunctionNoParamNoResult extends Function {

    public FunctionNoParamNoResult(String name) {
        super(name);
    }

    public abstract void function();//无参无返回值
}复制代码

5.FunctionManager用于管理四中情况

package com.zhang.yu.struct;

import android.text.TextUtils;

import java.util.HashMap;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:管理类
 */

public class FunctionManager {
    private static final FunctionManager ourInstance = new FunctionManager();

    public static FunctionManager getInstance() {
        return ourInstance;
    }

    private FunctionManager() {
        mFunctionNoParamNoResultHashMap = new HashMap<>();
        mFunctionNoParamAndResultHashMap = new HashMap<>();
        mFunctionAndParamAndResultHashMap = new HashMap<>();
        mFunctionAndParamNoResultHashMap = new HashMap<>();
    }
    //无参数无返回值
    private HashMap<String,FunctionNoParamNoResult> mFunctionNoParamNoResultHashMap;
    //无参数有返回值
    private HashMap<String,FunctionNoParamAndResult> mFunctionNoParamAndResultHashMap;
    //有参数有返回值
    private HashMap<String,FunctionAndParamAndResult> mFunctionAndParamAndResultHashMap;
    //有参数无返回值
    private HashMap<String,FunctionAndParamNoResult> mFunctionAndParamNoResultHashMap;

    //添加接口
    public FunctionManager addFunction(FunctionNoParamNoResult function){
        mFunctionNoParamNoResultHashMap.put(function.mFunctionName,function);
        return this;
    }

    //执行接口
    public void invokeFunction(String functionName){
        if(TextUtils.isEmpty(functionName)){
            return;
        }
        if(mFunctionNoParamNoResultHashMap != null){
            FunctionNoParamNoResult f = mFunctionNoParamNoResultHashMap.get(functionName);
            if(f != null){
                f.function();
            }
            if(f == null){
                try {
                    throw new FunctionException("NO Function  :  "+functionName);
                } catch (FunctionException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //添加接口
    public FunctionManager addFunction(FunctionNoParamAndResult function){
        mFunctionNoParamAndResultHashMap.put(function.mFunctionName,function);
        return this;
    }

    //执行接口
    public <Result> Result invokeFunction(String functionName,Class<Result>  c){
        if(TextUtils.isEmpty(functionName)){
            return null;
        }
        if(mFunctionNoParamAndResultHashMap != null){
            FunctionNoParamAndResult f = mFunctionNoParamAndResultHashMap.get(functionName);
            if(f != null){
                if(c!=null){
                    return c.cast(f.function());
                }else{
                    return (Result) f.function();
                }
            }
            if(f == null){
                try {
                    throw new FunctionException("NO Function  :  "+functionName);
                } catch (FunctionException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

    //添加接口
    public FunctionManager addFunction(FunctionAndParamNoResult function){
        mFunctionAndParamNoResultHashMap.put(function.mFunctionName,function);
        return this;
    }

    //执行接口
    public <Param> Param invokeFunction(String functionName,String  str){
        if(TextUtils.isEmpty(functionName)){
            return null;
        }
        if(mFunctionAndParamNoResultHashMap != null){
            FunctionAndParamNoResult f = mFunctionAndParamNoResultHashMap.get(functionName);
            if(f != null){
                if(str!=null) {
                    return (Param) f.function(str);
                }
            }
            if(f == null){
                try {
                    throw new FunctionException("NO Function  :  "+functionName);
                } catch (FunctionException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
}复制代码

6.FunctionException自定义异常

package com.zhang.yu.struct;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:
 */

public class FunctionException extends Exception {
    public FunctionException(String s){
        super(s);
    }
}复制代码

7.BaseFragment用于绑定接口

package com.zhang.yu;

import android.content.Context;
import android.support.v4.app.Fragment;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:
 */

public class BaseFragment extends Fragment {

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        //绑定接口
        if(context instanceof MainActivity){
            ((MainActivity)context).setFunction();
        }
    }
}复制代码

8.Fragment1

package com.zhang.yu;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.zhang.yu.struct.FunctionManager;

/**
 * Created by zhang_shuai on 2017/10/18.
 * Del:
 */

public class Fragment1 extends BaseFragment {

    //定义接口
    public static final String INTRFACE = Fragment1.class.getName()+"NPNR";


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_message, container, false);
        view.findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FunctionManager.getInstance().invokeFunction(INTRFACE);//使用接口
            }
        });
        return view;
    }

}复制代码

9.MainActivity使用

//创建接口
    public void setFunction(){
        FunctionManager functionManager = FunctionManager.getInstance();

            functionManager.addFunction(new FunctionNoParamNoResult(Fragment1.INTRFACE) {
                @Override
                public void function() {
                    Toast.makeText(MainActivity.this,"无参无返回值的接口",Toast.LENGTH_SHORT).show();
                }
            });

           functionManager.addFunction( new FunctionNoParamAndResult<String>(Fragment2.INTRFACE){

               @Override
               public String function() {

                   return "我是接口   有返回值 无参的2";
               }
           });

        functionManager.addFunction(new FunctionAndParamNoResult(Fragment3.INTRFACE) {
            @Override
            public String function(Object data) {
                return "我是接口   有返回值  有参的3" +data;
            }
        });


    }复制代码

总结

1.用到this调度
2.主要设计思想
3.一句话定义接口 绑定接口 调用接口

项目地址:github.com/fengyutongx…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值