一个关于工厂模式的问题,看似简单实际很头痛。
最近在做一个即时通信软件,服务器和客户端是靠各种具体消息类的对象来进行传递的。各种具体消息类都是继承同一抽象消息类,只有层次结构只有一次,而且各种消息类的接口也很单一,就一个Message.Send()方法(把消息发送出去)。这种结构很适合用工厂模式来解决(简单工厂)。
现在有个很头痛的问题——每种消息类都有自己所承载的信息,比如聊天有文本信息,注册用户有用户信息,用户登录有用户名和密码……以前这些信息都是在构造具体消息类的时候用构造函数传递给它们的。但是现在改成工厂模式的时候却发现无法再将这些信息传进去——因为每种消息类所承载的信息差别很大(比如MessageA要一个String,MessageB要一个User对象,MessageC要两个String等等)不可能用一个或很少几个工厂方法来构造这些消息对象。如果只是把这些对象产生以后将这些信息交给调用者来赋值,则必须涉及到每个消息具体的类,又和使用工厂模式的初衷违背了。
请问大家有没有什么好的方案或技巧解决这个问题?谢谢大家了,这个问题困扰我很长时间了!