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;
}
}以上就是小编今天的分享了,希望可以帮助到大家。