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
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值