对不起,这不是什么问题,而是向你寻求帮助。
我对可插拔应用程序完全陌生。我以前甚至都没想过。
目前,我在一个sms应用程序中工作,该应用程序可能有不同的网关来发送SMS。
在网关中,根据一定的标准动态选择合适的网关。
不同的网关需要不同的url和数据来发送SMS。即-
//This is for one gateway
xyz.com/SendTextMessage?Username=XX&Password=XX&From=XX&To=XX&Message=##
//This is for one gateway
abc.com?IN_MSG_ID=XX&MOBILENO=XX&BODY=XX&ORIGIN_PORT=XX例如,我需要一个插件,可以发送短信-
void SendMessage()
{
//Send via abc
}可能有另一个插件可以发送短信-
void SendMessage()
{
//Send via xyz
}我不知道如何在不修改主应用程序源代码的情况下为网关准备插件。
我可以从你那里得到一个想法吗?
发布于 2017-07-04 18:11:18
请参考一些关于工厂模式的文档。这里有一个- https://www.tutorialspoint.com/design_pattern/factory_pattern.htm
有一个IMessageSender接口,它有一个接受MessageObject参数的方法SendMessage()。MessageObject应该具有发送消息的所有相关详细信息。(发件人、收件人、正文等)
现在,您可以拥有不同的IMessageSender接口实现,每个实现都使用自己的网关和其他细节。
ABCMessageSender : IMessageSender
{
void SendMessage(MessageObject messageObject)
{
//Send via abc
}
}
XYZMessageSender : IMessageSender
{
void SendMessage(MessageObject messageObject)
{
//Send via xyz
}
}现在,您将创建一个工厂接口和一个工厂类
public interface IMessageSenderFactory
{
IMessageSender getMessageSender(MessageObject messageObject);
}然后为该接口提供一个实现
public class MessageSenderFactory : IMessageSenderFactory {
//use getMessageSender method to get object of type MessageSender
public IMessageSender getMessageSender(MessageObject messageObject){
if(messageObject == null){
return null;
}
if(messageObject.From.equalsIgnoreCase("Some condition")){
return new ABCMessageSender();
} else if(messageObject.Rate.equalsIgnoreCase("Some other condition")){
return new XYZMessageSender();
} //else if(some other condition){
//return some other message sender
//}
return null;
}
}最后,使用上面的工厂方法获取适当的IMessageSender实例并对其调用SendMessage()。如果您使用任何依赖注入模式,则可以将IMessageSenderFactory注入到控制器(或任何其他使用类)中并从那里使用它。
https://stackoverflow.com/questions/44900852
复制相似问题