美文网首页Android NDK程序员终端研发部
java使用接口实现类似C/C++函数指针功能(接口回调)

java使用接口实现类似C/C++函数指针功能(接口回调)

作者: 桂慧要努力当个攻城师 | 来源:发表于2017-10-17 23:11 被阅读108次

在一个项目中,如果存在一个设备类,具备多种通信接口,如网口,串口,CAN,IIC,SPI等。而此设备需要提供各种通信接口的打开关闭和读写方法。那么我们就可以声明一个接口包含通信需要的方法定义。然后定义不同的通信接口的实例化方法。这样设备类实例对象就可以根据实际使用通信接口类型而选择使用对应的实例化接口。

方法步骤

声明接口

public interface Drive {
    int open();
    int close();
    int read();
    int write();
}

声明使用类

public class Device {
    public Drive drive;//定义一个驱动接口。
    Device(Drive drive){
        this.drive = drive;
    }
    Device(){}
    public int open(){
        drive.open();//调用接口方法
        return 0;
    }
    public int close(){
        drive.close();
        return 0;
    }
    public int read(){
        drive.read();
        return 0;
    }
    public int write(){
        drive.write();
        return 0;
    }
}

接口实例化

 Drive drive_1 = new Drive() {
            @Override
            public int open() {
                Log.i(TAG, "open: drive_1");
                return 0;
            }

            @Override
            public int close() {
                Log.i(TAG, "close: drive_1");
                return 0;
            }

            @Override
            public int read() {
                Log.i(TAG, "read: drive_1");
                return 0;
            }

            @Override
            public int write() {
                Log.i(TAG, "write: drive_1");
                return 0;
            }
        };
        Drive drive_2 = new Drive() {
            @Override
            public int open() {
                Log.i(TAG, "open: drive_2");
                return 0;
            }

            @Override
            public int close() {
                Log.i(TAG, "close: drive_2");
                return 0;
            }

            @Override
            public int read() {
                Log.i(TAG, "read: drive_2");
                return 0;
            }

            @Override
            public int write() {
                Log.i(TAG, "write: drive_2");
                return 0;
            }
        };

创建实例对象并对接口成员进行赋值。

        @Override
        public void run() {
            Log.i(TAG, "run: 线程启动");
            Device device = new Device();
            Log.i(TAG, "run: 使用第一种驱动");
            device.drive = drive_1;
            device.open();
            device.write();
            device.read();
            device.close();
            device.drive = drive_2;
            Log.i(TAG, "run: 使用第二种驱动");
            device.open();
            device.write();
            device.read();
            device.close();
            Log.i(TAG, "run: 线程结束");
        }

当把drive_1赋值给device.drive时调用的是drive_1的实例方法。

09-20 06:47:12.982 9033-9050/? I/TimerThread: open: drive_1
09-20 06:47:12.982 9033-9050/? I/TimerThread: write: drive_1
09-20 06:47:12.982 9033-9050/? I/TimerThread: read: drive_1
09-20 06:47:12.982 9033-9050/? I/TimerThread: close: drive_1

把drive_2赋值给device.drive时调用的是drive_2的实例方法。

09-20 06:47:12.982 9033-9050/? I/TimerThread: open: drive_2
09-20 06:47:12.982 9033-9050/? I/TimerThread: write: drive_2
09-20 06:47:12.982 9033-9050/? I/TimerThread: read: drive_2
09-20 06:47:12.982 9033-9050/? I/TimerThread: close: drive_2

接口回调可以降低程序的耦合度,使程序易于拓展。

相关文章

  • java使用接口实现类似C/C++函数指针功能(接口回调)

    在一个项目中,如果存在一个设备类,具备多种通信接口,如网口,串口,CAN,IIC,SPI等。而此设备需要提供各种通...

  • Kotlin使用接口回调

    1.Java中的接口回调实现(支持多方法回调) 声明回调接口,初始化接口 使用接口回调(无参数) 使用接口回调(带...

  • C++基础复习

    0x01:string 0x02:函数指针 在C与C++中,没有接口与回调的概念;但是通过函数指针,我们可以轻松的...

  • JNI&NDK

    JNI: Java Native Interface (Java本地接口,本地接口即C和C++开发的接口) → 调...

  • C++中回调的实现

    C++中使用class语法实现回调(当然,,旧式的C函数指针回调也是支持的) 比如,有人提供一个类库 AfCopy...

  • Kotlin中使用高阶函数代替接口回调

    Kotlin中使用高阶函数代替接口回调 Java思路实现 1.创建接口,创建对应抽象方法2.声明接口成员变量3.创...

  • c++11 之回调函数

    什么是回调函数,以及在c++中如何使用? 回调函数就是将函数 作为参数传给其他的函数。 c++ 中有三种方式实现:...

  • java8 lambda-2-各类语言中的lambda

    C/C++:函数指针 C#:委托 java之前:接口参数,实际传入匿名对象(匿名内部类) lamda表达式是Jav...

  • java回调函数

    利用接口来实现回调,即在调用回调函数的类中实现接口,并实现接口中的方法即回调的方法,被调用类中存在接口的熟悉,并将...

  • JNI&NDK开发最佳实践(十):补充要点(持续更新)

    一、在C中实现Java回调函数 我们知道在C中通过传递函数指针可以轻易实现函数回调的效果,而在java中则一般是通...

网友评论

    本文标题:java使用接口实现类似C/C++函数指针功能(接口回调)

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