各位亲:
由于过年(回家没有网络),本次更新为四篇文章。本篇是第一篇,主要介绍如何实现聊天消息的发送
框架的设计,这里主要设计到了观察者模式的应用。
首先在此祝大家新年快乐。
如果在公司某一天你的老大过来说,小张在咱们的app中的添加一个聊天功能吧(貌似支付宝正在推广这
个)。这个时候你是否一头雾水,什么IM协议,消息类型都不知道,那你要
怎么做呢?如何去调研等等工作呢?还是直接写代码?都不太合适。尤其是UI界面都不一样。那我们能做什
么呢?
我们首先能做的是整体的设计,比如说一个聊天,这个聊天就是一个点对点的(无论是私聊还是群聊),
都是对message消息的发送和接受。但是消息从哪里来呢? 发送谁呢?这些
都不知道,但是我我知道的是发送消息时,发送的状态(发送中、发送成功和发送失败)。我接受消息我能
解析出来(json、和object)。
大家都有微信和qq,在微信中不管您是否在聊天中还是在主界面,只要来消息,通知栏和提示符号都会在
同一时间被执行。这个实现原理是什么呢?这个就是观察者模式的应用,其实
在平时开发中会经常使用,比如按钮的点击事件等等,简单说,就是一个对象在通知它后,他会时刻观察他
感兴趣的事件,只要这个事件被触发,他就执行对应的行为(方法)。
在聊天中会遇到身什么类型的数据,这些都要有一定的封装,这里就要使用实体类(DTOMessage)来封装。
public class DTOMessage implements Serializable{
public enum MessageStaty{
// 发送状态
sending,success,failure
}
public enum MessageType{
// 消息类型
text,voide,audio,location,img
}
public MessageType type;
public MessageStaty status;
public String content;//消息内容
public String msgId;//消息id
@Override
public String toString() {
return "DTOMessage [type=" + type + ", status=" + status + ", content="
+ content + ", msgId=" + msgId + "]";
}
}
第二步骤:
就是创建观察者定义,此观察者主要作用是实现了对事件的处理,但一般不做具体处理(很多时候为抽象方法)。
public class PushWatcher implements Observer {
@Override
public void update(Observable observable, Object data) {
if(data instanceof DTOMessage){
notifyMessage((DTOMessage)data);
}
}
// 具体执行的方法
private void notifyMessage(DTOMessage data) {
// TO-DO UI SQLite
}
}
第三步骤:
创建被观察者,即当什么时候让观察者来做出反映。
这里的观察者使用了单例模式,建议使用单例模式来创建对象。
public class PushChanger extends Observable {
private static PushChanger mInsatnce;
private PushChanger(){
}
public static PushChanger getInstance(){
if(mInsatnce==null){
mInsatnce=new PushChanger();
}
return mInsatnce;
}
public void handleMes(String content){
setChanged();
notifyObservers(content);//通知观察者
}
}
第四步骤:
就是在获得数据时,获得被观察者对象来说通知观察者执行某些特定的工作。
框架编写之聊天框架认识(二)
最新推荐文章于 2024-01-25 18:22:58 发布