Android设计模式系列--观察者模式

最近做一个android项目遇到的一种设计模式,通过在UI中注册对某事件的监听,当该事件发生时,自动触发UI执行相关的操作,通过在网上搜索,弄明白了这用了观察者模式,现将项目中该模式的代码实现总结一下:

首先要定义一个容器(ArrayList、Map等)mListeners来存放监听器;

private ArrayList<GroupInfoUpdateListener> mListeners;
public PushStatusClient(Context context) {
        mContext = context;
        mListeners = new ArrayList<GroupInfoUpdateListener>();
    }

然后定义监听器的接口,里面封装监听器要监听的事件;

public interface GroupInfoUpdateListener {
        public void onGroupListUpdate();

        public void onGroupAttrUpdate(String groupDN);

        public void onGroupMemberUpdate(String groupDN);
    }

最后定义一个监听器注册函数,将监听器都注册到容器中去;

public void registerGroupInfoUpdateListener(GroupInfoUpdateListener listener) {
        for (GroupInfoUpdateListener lis : mListeners) {
            if (lis.equals(listener)) {
                return;
            }
        }
        mListeners.add(listener);
    }

被观察的对象通过遍历容器中的监听器,调用监听器接口中的方法;

private void onProcessPushMsg(){
        for (GroupInfoUpdateListener listener : mListeners) {
            listener.onGroupListUpdate();
        }
        for (GroupInfoUpdateListener listener : mListeners) {
            listener.onGroupAttrUpdate(groupDN);
        }
        for (GroupInfoUpdateListener listener : mListeners) {
            listener.onGroupMemberUpdate(groupDN);
        }
    }

作为观察者只需要将监听器注册到容器中去,然后复写监听器中的方法就可以了;

private PushStatusClient mPushStatusClient;

mPushStatusClient = EcontactFactory.getInstance().getPushStatusClient();
mPushStatusClient.registerGroupInfoUpdateListener(new GroupInfoUpdateListener() {
        public void onGroupListUpdate() {
            notifyUpdatingGroupList();
        };

        public void onGroupAttrUpdate(String groupIdList) {
            notifyUpdatingGroupAttr(groupIdList);
        };

        public void onGroupMemberUpdate(String groupIdList) {
            notifyUpdatingGroupMember(groupIdList);
        };
    });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值