java 匿名内部类 接口_java开发之匿名内部类,接口的使用

下面的例子是Java.JDK7学习笔记上的

打算开发多人联机程序,对每个联机客户端,都会建立Client对象封装相关信息

1.Client.java

1 public classClient {2 private static final String TAG = "Client";3

4 public finalString ip;5 public finalString name;6

7 publicClient(String ip, String name) {8 this.ip =ip;9 this.name =name;10 }11 }

2.程序中建立的client对象,都会加入ClientQueue集中管理,若程序中其他部分希望在ClientQueue的Client加入或移除时可以收到通知,以便做一些处理,那么可以把Client加入或移除的信息包装为ClientEvent

ClientEvent.java

1 public classClientEvent {2 private static final String TAG = "ClientEvent";3 privateClient client;4

5 publicClientEvent(Client client) {6 this.client =client;7 }8

9 publicString getName(){10 returnclient.name;11 }12

13 publicString getIp(){14 returnclient.ip;15 }16 }

3.定义ClientListener接口,如果有对象对client加入ClientQueue有兴趣,可以操作这个接口

ClientListener.java

1 public interfaceClientListener {2

3 voidclientAdded(ClientEvent event);4

5 voidclientRemoved(ClientEvent event);6 }

4.ClientQueue.java,其中注释的部分为书中内容,我不明白为什么使用一个list处理,因为集合里面只有一个listener,可能是为了多个对象监听的。我修改了自己的代码。

1 public classClientQueue {2 private List< Client > clients = new ArrayList<>();3 //private List< ClientListener > listeners = new ArrayList<>();

4 privateClientListener listener;5

6 public voidaddClientListener(ClientListener listener) {7 //listeners.add(listener);

8 this.listener =listener;9 }10

11 public voidadd(Client client) {12 clients.add(client);13 ClientEvent event = newClientEvent(client);14 //for ( ClientListener l : listeners ) {15 //l.clientAdded(event);16 //}

17 listener.clientAdded(event);18 }19

20 public voidremove(Client client) {21 clients.remove(client);22 ClientEvent event = newClientEvent(client);23 //for ( ClientListener l : listeners ) {24 //l.clientRemoved(event);25 //}

26 listener.clientRemoved(event);27 }28 }

原文:如果有对象对client加入ClientQueue有兴趣,可以操作ClientListener,并通过addClientListener()注册,当每个Client通过ClientQueue的add()收集时,接着使用ClientEvent封装Client相关信息,再使用fot循环将注册的ClientListener逐一取出,并调用clientAdded()方法进行通知。如果有对象被移除,流程类似,这可以在ClientQueue的remove()方法中看到相关程序代码。

5.测试部分:

1 @Test2 public void test8() throwsException{3 ClientQueue queue=newClientQueue();4 queue.addClientListener(newClientListener() {5 @Override6 public voidclientAdded(ClientEvent event) {7 System.out.println(event.getName()+" 从 "+event.getIp()+"联机");8 }9

10 @Override11 public voidclientRemoved(ClientEvent event) {12 System.out.println(event.getName()+" 从 "+event.getIp()+"脱机");13 }14 });15

16 Client c1=new Client("192.168.0.1","haha");17 Client c2=new Client("10.88.6.2","jerome");18

19 queue.add(c1);20 queue.add(c2);21

22 queue.remove(c1);23 queue.remove(c2);24 }

6.执行结果:

haha 从 192.168.0.1联机

jerome 从 10.88.6.2联机

haha 从 192.168.0.1脱机

jerome 从 10.88.6.2脱机

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值