visitor模式的应用

来源:互联网 发布:js颜色代码 编辑:程序博客网 时间:2024/05/22 14:36

项目中遇到这样一个问题,sip协议的消息种类很多,在不同的场景下,收到底层送上来的message时,不得不进行大量instanceof的类型判断,效率低而且不易维护,考虑到sip消息种类相对固定,可以使用visitor设计模式。



public abstract class Message {    public abstract void accept(Handler h);}

public class InviteMsg extends Message {@Overridepublic void accept(Handler h) {h.handleInvite(this);}}

public class InfoMsg extends Message {@Overridepublic void accept(Handler h) {h.handleInfo(this);}}

public class ByeMsg extends Message {@Overridepublic void accept(Handler h) {h.handleBye(this);}}

public abstract class Handler {    public abstract void handleInvite(Message msg);    public abstract void handleBye(Message msg);    public abstract void handleInfo(Message msg);}

public class SimpleCallHandler extends Handler {@Overridepublic void handleInvite(Message msg) {//do what you want for simple call}@Overridepublic void handleBye(Message msg) {//do what you want for simple call}@Overridepublic void handleInfo(Message msg) {//do what you want for simple call}}

public class GroupCallHandler extends Handler {@Overridepublic void handleInvite(Message msg) {//do what you want for group call}@Overridepublic void handleBye(Message msg) {//do what you want for group call}@Overridepublic void handleInfo(Message msg) {//do what you want for group call}}

public class ConferenceHandler extends Handler {@Overridepublic void handleInvite(Message msg) {//do what you want for conference call}@Overridepublic void handleBye(Message msg) {//do what you want for conference call}@Overridepublic void handleInfo(Message msg) {//do what you want for conference call}}

public class Client {private Handler handler;public Client(Handler handler){this.handler = handler;}public void recievedMessage(Message msg){msg.accept(handler);}}


原创粉丝点击