java delegate

作者:原创时间:2022-03-30
文档

java delegate是什么,让我们一起了解一下?

delegate是一种设计模式,即一个对象不能完成的事情,委托另一个对象帮其完成,delegate定义代理为属性时,使用weak修饰,避免造成对象的循环引用,引起内存泄露。

如何在java中定义delegate代理?

在java中定义delegate代理需要进行实现的方式。代码示例如下:

- (void)orderTickerForMe
{
         NSLog(@"叫人帮我订票");
         
         if (self.tickerDelegate && [self.tickerDelegate respondsToSelector:@selector(orderTicker)])
         {
             [self.tickerDelegate orderTicker];
         }
}
- (void)getTickerForMe
{
         NSLog(@"叫人帮我取票");
         
         if (self.tickerDelegate && [self.tickerDelegate respondsToSelector:@selector(getTicker)])
         {
             [self.tickerDelegate getTicker];
         }
}

那我们在使用时应该注意什么?

1、导入该对象的头文件。

2、实例化该对象。

3、设置该对象的代理。

4、添加该对象的协议。

5、实现该对象的代理方法。

实战操作:

因为在java中就没有delegate这个字段了,所以要实现,不过也不是很复杂。

1、首先定义一个interface

// 观察者
public interface IConnectEventObserver
{
// 接受到一个包
public void OnRecvANetworkPacket(ConnectPacket packet);
}

2、然后定义一个虚类,在里面定义通知对象。

// 通知者
public abstract class ConnectEventINotifier {
protected ArrayList observerList = new ArrayList();
/**
* 新增一个observer
* @param observer 添加的观察者
* @return 是否添加成功/新添加
*/
public boolean AddObserver(IConnectEventObserver observer){
if(observer == null)
{
throw new NullPointerException();
}
if( observerList.indexOf(observer)>= 0){
// 重复添加观察者
return false;
}
observerList.add(observer);
return true;
}
/**
* 删除一个observerList
* @param observer
* @return 是否删除成功,如果失败,代表这个观察者并没有注册
*/
public boolean RemoveObserver(IConnectEventObserver observer){
if(observer == null){
throw new NullPointerException();
}
int observerIndex = observerList.indexOf(observer);
if( observerIndex>= 0){
observerList.remove(observerIndex);
return true;
}
return false;
}
/**
* 通知所有观察者
* @param packet
* @return
*/
protected boolean NotifyAllObserver(ConnectPacket packet){
for(IConnectEventObserver observer : observerList) {
observer.OnRecvANetworkPacket(packet);
}
return true;
}
}

以上就是小编今天的分享了,希望可以帮助到大家。

显示全文
java调用c++接口 java调用c++ java获取绝对值 java delete java调用asmx接口 java dependency java dev java fastdfs java development java dict java fastjson java feign java divide java field java field获取值 java dockerfile java file.exists() java fileinputstream java findfirst java flatmap java decodeuri java decode java调python java decaf java读取本地excel java读取json java dataset java规则引擎 java dataframe java表单校验 java获得当前路径 java dashboard java获取随机数 java daemon java获取随机字符串 java ctp java获取运行时间 java cssbox java获取路径 java获取请求域名