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){};
}