移:内部匿名类、事件监听、回调、Observer模式

内部匿名类、事件监听、回调、Observer模式
在和界面相关的开发中,经常会使用内部匿名类实现事件监听。而内部匿名类的好处是很容易实现回调,配合使用观察者模式,可以很方面的事件监听模型。例子如下:
 

//界面类
public class TestViewer extends TreeViewer {
 Model model;
 //构造函数
 public TestViewer(final Composite parent, int style, Model model) {
  super(parent,style);
  this.model = model;
  //内部匿名类,注册一个model的事件
  md.addListener(new ModelListener() {
   public void modelChanged(final Node obj) {
    TestViewer.this.add(obj);//回调
   }
  });
 }
 //绘制界面,把获得的Node对象绘制到界面中
 public void add(Node node){
 
 }
}
//模型类
public class Model{
 private List listeners = new ArrayList();//定义监听器数组
 public void createNode(String name) throws InterruptedException {
  SessionTreeNode tt=null;
  try{
   Node node=new Node(name);
  }finally{
   modelChanged(node);
  }
 }
 //新增监听
 public void addListener(ModeChangedListener listener) {
  listeners.add(listener);
 }
 
 //调用所有的监听程序
 public void modelChanged(Node node){
  Object[] ls = listeners.getListeners();
  for(int i=0;i<ls.length;++i){
   try{
    ((ModeListener)ls[i]).modelChanged(node);
   }catch(Throwable e){
   }
  }
 }
}
//模型类中使用到的一个结点
public class Node{
 public Node(String name){
 }
}
//定义监听器借口
public interface ModelListener {
 void modelChanged(Node node);
}
 
调用过程:
1.在应用上下文中新建一个Model: Model model = new Model();
  如果是做插件程序,可以把model放在Plugin类中
2.当应用程序初始化时,会 new TestViewer(composite,style,model);
  注意model此时被传入。当然model也可以保存在上下文中
3.在界面中引发一个事件,会调用model.createNode("node");
  此时会调用所有的监听程序(Observer模式),它将执行回调用程序 TestViewer.this.add(obj);
  于是,node将会被画到View上
4.可以把程序入口抽象到一组Action中,那就形成了一个MVC模式:程序入口就是C,Model就是M,View就是V
 
总结:使用以上技术,将模式和Java语言充分结合,可以很方面实现自己的事件监听模型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值