我有一个基本类,它接受套接字连接并发送不同的消息,具体取决于调用哪些重载方法
public void send(byte[] message) {...}
public void send(String message) {...}
...
每个方法参数最终都会转换为字节数组,以便根据协议通过套接字发送。我正在调查战略模式,似乎它可能适用。我可以使用不同的发送策略,而不是让一个类具有多个重载方法。我唯一的问题是如何解释不同的消息参数类型?或者,如果有一种更好的方式我不知道,请告诉我。
答案 0 :(得分:2)
如何将泛型与经典策略模式设计结合使用:
//Strategy Contract
public interface SendStrategy<F>{
public void send(F data);
}
public class StringSender implements SendStrategy<String>{
public void send(String data){};
}
public class ByteArraySender implements SendStrategy<byte[]>{
public void send(byte[] data){};
}
答案 1 :(得分:0)
您可以使用send(Object obj)方法处理器接口。
然后你可以使用StringProcessor,ByteArrayProcessor等实现来处理相应的操作。
根据消息类型,调用者必须实例化适当的处理器类型。
答案 2 :(得分:0)
好吧,引用Wikipedia,&#34;策略模式[...]是一种软件设计模式,可以在运行时选择算法的行为。&#34;
在这里,您希望在编译时选择您的行为,因为它取决于要发送的消息的类型。
因此,为简化起见,策略DP不适用于此。
实际上,事情有点复杂。你实际上可以编写一个public void send(Object message)
然后使用反射来确定正确的策略,方法是从对象类名称中提取它(在这里作为一个类,例如myprogram.sendmessage.strategies.Integer
) - 当心模板类;然后使用此策略发送消息。
但是,您丢失了任何编译时检查,实际上可以发送这种类型的消息。
现在的问题是:使用不适合应用程序的DP是否值得所有这些麻烦?
无论如何,可能有更好的方法,取决于你的协议是否已经僵化。您可以实现一个send(Serializable o)
函数,让Java可以将对象o
序列化为流入和流出。