现在的位置: 首页 > 综合 > 正文

java中接口的妙用(一)

2018年05月16日 ⁄ 综合 ⁄ 共 1901字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.