android观察者模式使用,Android 观察者模式简单使用

本文介绍了如何通过实现观察者模式来完成一对多的消息发布功能。具体实现中,创建了一个SubjectManager类作为事件管理者,它负责事件注册、删除和消息分发。IObserverListener接口用于定义更新消息的回调方法。SendingRoomActivity类作为消息发起方,RoomOneActivity和RoomTwoActivity作为消息接收方并实现了IObserverListener接口。当发送消息时,SubjectManager会将消息分发给所有注册的观察者,即RoomOneActivity和RoomTwoActivity,从而实现消息的广播效果。
摘要由CSDN通过智能技术生成

前段时间遇到一个一对多发消息的需求,想了想就选择自己写一个观察者模式来实现,下面我们分解出五个简单的类说一下:

一个发送室向两个房间发消息

1.SubjectManager事件注册,删除和消息分发使用

2.IObserverListener用于回调更新消息

3.SendingRoomActivity发送室

4.RoomOneActivity第一个房间,实现IObserverListener接口

5.RoomTwoActivit第二个房间,实现IObserverListener接口

下图是我们发送消息内容是123456,其它两个房间都能收到

55a2246811aa

微信截图_20180812145519.png

看一下代码如下:

先看一下SubjectManager文件,详细注释说明

public class SubjectManager {

private static ArrayList observerList = new ArrayList<>();

private static SubjectManager mManager;

private String mMsg;

public static synchronized SubjectManager getInstance() {

if (mManager == null) {

mManager = new SubjectManager();

}

return mManager;

}

/**

* 发送消息

*

* @param msg

*/

public void sendMsg(String msg) {

this.mMsg = msg;

notifyAlls();

}

/**

* 注册事件

*

* @param observer

*/

public void registrationObserver(IObserverListener observer) {

if (observerList != null && observer != null) {

observerList.add(observer);

}

notifyAlls();

}

/**

* 删除事件

*

* @param observer

*/

public void unregistrationObserver(IObserverListener observer) {

if (observerList != null && observer != null) {

observerList.remove(observer);

}

}

/**

* 分发消息

*/

private void notifyAlls() {

for (IObserverListener observer : observerList) {

if (observer != null) {

observer.update(mMsg);

}

}

}

}

然后是接口IObserverListener

public interface IObserverListener {

void update(String msg);

}

SendingRoomActivity类直接调用sendMsg发消息

btn_tv.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

//发送消息

SubjectManager.getInstance().sendMsg(content_et == null ? "" : content_et.getText().toString());

}

});

RoomOneActivity和RoomTwoActivity分别是两个房间内容一样

public class RoomOneActivity extends AppCompatActivity implements IObserverListener {

private TextView text_tv;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_room_one);

text_tv = findViewById(R.id.text_tv);

//注册事件

SubjectManager.getInstance().registrationObserver(this);

}

@Override

public void update(String msg) {

//接收消息

text_tv.setText(msg);

}

@Override

protected void onDestroy() {

super.onDestroy();

//删除事件

SubjectManager.getInstance().unregistrationObserver(this);

}

}

其实主要是把所有观察者注册到消息管理里面,如果有新消息了就分发到各个观察者模块,主要是理解原理!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值