func() java_java中接口的妙用(一) | 学步园

java中接口的妙用(一):

一. 本例功能:

接口作为参数,将调用者和实现彻底分离。

二. 实例代码:

1). IEvent.java:

package com.myjava.test;

//接口

public interface IEvent {

void OnEvent(int event, int data);

}

2). Func.java

package com.myjava.test;

//调用者

public class Func {

int type;

public Func(int type) {

this.type = type;

}

public void Func1(final IEvent listener) {

//do something,

if (type == 1) {

listener.OnEvent(1, 10);

}else if (type == 2){

//do another thing

listener.OnEvent(2, 10);

}

}

}

3). JavaTest.java

public class JavaTest {

/**

* @param args

*/

public static void main(String[] args) {

JavaTest jt = new JavaTest();

//test case2: interface

jt.test2(1);

}

public void test2() {

Func f = new Func(2);

//实现interface

f.Func1(new IEvent() {

public void OnEvent(int event, int data) {

switch(event) {

case 1:

System.out.println("res +:" + event + ";" +  (data+10));

break;

case 2:

System.out.println("res -:" + event + ";" +  (data-10));

break;

default:

System.out.println("res donothing");

break;

}

return;

}

});

}

}

三. 说明:

1. 调用者是Func1,实现是new IEvent(注意:这里是直接用new关键字,即匿名实现),二者彻底分离,interface作为参数。

2. IEvent是interface,可我们照样用了new关键字,但必须同时要实现,而不能在外面实现;这种方式称为匿名实现,和匿名类中的匿名的理解方式一样。

3. 功能的理解(使用场合): 调用者由于不同的场合或条件,会以不同的参数调用interface的函数,从而达到不同的目的。同时,实现者(OnEvent函数)需要根据不同的

参数做出不同的动作,这时,就可以用这种模式了。

4. 特点: 实现与调用者分离,通过interface来建立二者的关系;匿名实现接口的使用技巧。

5. 补充:当然,这里,也可以不用匿名类,而是实现一个类,这个类implements接口,调用的时候,将这个类的实例传到调用者中。如下:

//将下面代码加入到JavaTest.java中,即可使用。

//实现interface

class EventImpl implements IEvent  {

public void OnEvent(int event, int data) {

switch(event) {

case 1:

System.out.println("res +:" + event + ";" +  (data+10));

break;

case 2:

System.out.println("res +:" + event + ";" +  (data+10));

break;

default:

break;

}

}

private void test3() {

EventImpl impl = new EventImpl();

Func f = new Func(2);

f.Func1(impl);

}

}

6. 从5中的例子可以看出,我们既不需要修改Func.java,也不需要修改IEvent.java,只需要修改IEvent接口的实现即可,对于在一个系统中,很多类都需要实现同一个接口,并且调用者的函数形式也一致,就可以用这种方式了。

7. 以上实例,是从项目中抽象出来,进行简化加工后的实现。

8. 测试结果:

res -:2;0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值