当前位置: 技术问答>java相关
设计模式一问
来源: 互联网 发布时间:2015-07-14
本文导语: 假设一个Socket的例子: 多客户端通过服务器进行各种消息的交流 客户端发送的消息有以下几种:登录消息(LoginMsg),注册消息(RegMsg),系统事件消息(SysMsg),文本交谈消息(TxtMsg)等等消息,还可能有图像,视频,音频等消...
假设一个Socket的例子:
多客户端通过服务器进行各种消息的交流
客户端发送的消息有以下几种:登录消息(LoginMsg),注册消息(RegMsg),系统事件消息(SysMsg),文本交谈消息(TxtMsg)等等消息,还可能有图像,视频,音频等消息..
创建一个Msg抽象类,以上消息作为它的子类,用一个工厂类产生消息MsgFactory,
问题是服务器接收到各种不同的消息,我想让它自动调用不同的操作,而不是用一大段switch语句判断消息的类型,然后再调用相应的操作,比如:
对LoginMsg,送到一个验证类进行验证,
对RegMsg,写入到数据库
对SysMsg,写入到日志和发送到每个客户端
对TxtMsg,发送给给定的客户端,
....
请问要用什么模式来设计
多客户端通过服务器进行各种消息的交流
客户端发送的消息有以下几种:登录消息(LoginMsg),注册消息(RegMsg),系统事件消息(SysMsg),文本交谈消息(TxtMsg)等等消息,还可能有图像,视频,音频等消息..
创建一个Msg抽象类,以上消息作为它的子类,用一个工厂类产生消息MsgFactory,
问题是服务器接收到各种不同的消息,我想让它自动调用不同的操作,而不是用一大段switch语句判断消息的类型,然后再调用相应的操作,比如:
对LoginMsg,送到一个验证类进行验证,
对RegMsg,写入到数据库
对SysMsg,写入到日志和发送到每个客户端
对TxtMsg,发送给给定的客户端,
....
请问要用什么模式来设计
|
public interface Msg{
void acceptVisitor(MsgVisitor v);
}
public interface MsgVisitor{
void visitLoginMsg(...);
void visitRegMsg(...);
void visitTxtMsg(...);
void visitSysMsg(...);
}
class LoginMsg implements Msg{
public void acceptVisitor(MsgVisitor){v.visitLoginMsg(...);}
...
}
class SysMsg implements Msg{
public void acceptVisitor(MsgVisitor){v.visitSysMsg(...);}
...
}
...
void acceptVisitor(MsgVisitor v);
}
public interface MsgVisitor{
void visitLoginMsg(...);
void visitRegMsg(...);
void visitTxtMsg(...);
void visitSysMsg(...);
}
class LoginMsg implements Msg{
public void acceptVisitor(MsgVisitor){v.visitLoginMsg(...);}
...
}
class SysMsg implements Msg{
public void acceptVisitor(MsgVisitor){v.visitSysMsg(...);}
...
}
...
|
没那么麻烦,利用方法的过载(overload)就行了.
例如:
void processMsg(LoginMsg lm){
...
}
void processMsg(RegMsg rm){
...
}
...
例如:
void processMsg(LoginMsg lm){
...
}
void processMsg(RegMsg rm){
...
}
...
|
肯定要抽象消息Message,然后用一个Facade设计模式。
|
可以考虑使用proxy设计模式
|
在msg中定义应该调用的操作不是挺好的么。利用msg的多态。
abstract public void execute(Context con)
有点像command模式。
abstract public void execute(Context con)
有点像command模式。
|
visitor 也可以,但偶认为,在这里visitor一方的类继承结构不复杂,基本上只有一个类。似乎没有必要用visitor这么强的东东。
|
我对设计模式不熟,书才看了几业,不过看完你的要求之后,就冒出来两个字“多态”,具体怎么设计向高人学习。
关注
关注