Java 使用策略模式发送不同的消息
我有一个基本类,它接受套接字连接并根据调用的重载方法发送不同的消息Java 使用策略模式发送不同的消息,java,design-patterns,Java,Design Patterns,我有一个基本类,它接受套接字连接并根据调用的重载方法发送不同的消息 public void send(byte[] message) {...} public void send(String message) {...} ... 每个方法参数最终转换为字节数组,并根据协议通过套接字发送。我在研究战略模式,它似乎是可行的。我可以使用不同的发送策略,而不是让一个类包含多个重载方法。我唯一的问题是如何解释不同的消息参数类型?或者,如果我缺少更好的方法,请告诉我。您可以使用send(Object o
public void send(byte[] message) {...}
public void send(String message) {...}
...
每个方法参数最终转换为字节数组,并根据协议通过套接字发送。我在研究战略模式,它似乎是可行的。我可以使用不同的发送策略,而不是让一个类包含多个重载方法。我唯一的问题是如何解释不同的消息参数类型?或者,如果我缺少更好的方法,请告诉我。您可以使用send(Object obj)方法创建处理器接口 然后,您可以使用StringProcessor、ByteArrayProcessor等实现来处理适当的操作
根据消息的类型,调用程序必须实例化适当的处理器类型。您可以使用send(Object obj)方法创建处理器接口 然后,您可以使用StringProcessor、ByteArrayProcessor等实现来处理适当的操作
根据消息的类型,调用程序必须实例化适当的处理器类型。您可以使用send(Object obj)方法创建处理器接口 然后,您可以使用StringProcessor、ByteArrayProcessor等实现来处理适当的操作
根据消息的类型,调用程序必须实例化适当的处理器类型。您可以使用send(Object obj)方法创建处理器接口 然后,您可以使用StringProcessor、ByteArrayProcessor等实现来处理适当的操作 根据消息的类型,调用方必须实例化适当的处理器类型。好吧,引用“策略模式[…]是一种软件设计模式,可以在运行时选择算法的行为。” 这里,您希望在编译时选择您的行为,因为它取决于要发送的消息的类型 因此,为了简化事情,策略DP不适用于这里 事实上,事情有点复杂。实际上,您可以编写一个
public void send(Object message)
,然后使用反射来确定正确的策略,方法是从对象类名派生出来(这里作为类,例如myprogram.sendmages.strategies.Integer
)--注意模板类;然后使用此策略发送消息
但是,您将丢失任何编译时检查,以确保此类类型的消息实际上可以发送
现在的问题是:仅仅使用不适合应用程序的DP真的值得这么多麻烦吗
无论如何,可能有更好的方法,这取决于您的协议是否已经严格。您可以实现一个send(Serializable o)
函数,让Java实现对象o
在流中序列化和从流中序列化的神奇功能。引用“策略模式[…]是一种软件设计模式,允许在运行时选择算法的行为。”
这里,您希望在编译时选择您的行为,因为它取决于要发送的消息的类型
因此,为了简化事情,策略DP不适用于这里
事实上,事情有点复杂。实际上,您可以编写一个public void send(Object message)
,然后使用反射来确定正确的策略,方法是从对象类名派生出来(这里作为类,例如myprogram.sendmages.strategies.Integer
)--注意模板类;然后使用此策略发送消息
但是,您将丢失任何编译时检查,以确保此类类型的消息实际上可以发送
现在的问题是:仅仅使用不适合应用程序的DP真的值得这么多麻烦吗
无论如何,可能有更好的方法,这取决于您的协议是否已经严格。您可以实现一个send(Serializable o)
函数,让Java实现对象o
在流中序列化和从流中序列化的神奇功能。引用“策略模式[…]是一种软件设计模式,允许在运行时选择算法的行为。”
这里,您希望在编译时选择您的行为,因为它取决于要发送的消息的类型
因此,为了简化事情,策略DP不适用于这里
事实上,事情有点复杂。实际上,您可以编写一个public void send(Object message)
,然后使用反射来确定正确的策略,方法是从对象类名派生出来(这里作为类,例如myprogram.sendmages.strategies.Integer
)--注意模板类;然后使用此策略发送消息
但是,您将丢失任何编译时检查,以确保此类类型的消息实际上可以发送
现在的问题是:仅仅使用不适合应用程序的DP真的值得这么多麻烦吗
无论如何,可能有更好的方法,这取决于您的协议是否已经严格。您可以实现一个send(Serializable o)
函数,让Java实现对象o
在流中序列化和从流中序列化的神奇功能。引用“策略模式[…]是一种软件设计模式,允许在运行时选择算法的行为。”
这里,您希望在编译时选择您的行为,因为它取决于要发送的消息的类型
因此,为了简化事情,策略DP不适用于这里
事实上,事情有点复杂。实际上,您可以编写一个public void send(Object message)
,然后使用反射来确定正确的策略
//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){};
}