In my opinion best design pattern is Factory pattern. since client doesn't know which service or method would be call based on data entry. I just provided a sample although you can use java 8 features. there is a good sample.
so first of all define an interface:
public interface MessageProcess {
public void pushedMessage(CustomMessage message);
public String messageType();
}
and suppose you would have some process service like these:
public class ServiceA implements MessageProcess{
@Override
public void pushedMessage(CustomMessage message) {
}
@Override
public String messageType() {
return "messageType1";
}
}
and also:
public class ServiceB implements MessageProcess {
@Override
public void pushedMessage(CustomMessage message) {
System.out.println("pushed message by serviceB: " + message.toString());
}
@Override
public String messageType() {
return "messageType2";
}
}
now you can create a Factory class which identify specify service based on message type.
public class MessageFactory {
public MessageProcess getByType(String messageType) {
if (messageType.equals("messageType1"))
return new ServiceA();
else if (messageType.equals("messageType2"))
return new ServiceB();
return null;
}
}
and now we use it such as this:
public class MessageProcessTest {
public static void main(String[] args) {
MessageFactory messageFactory = new MessageFactory();
messageFactory.getByType("messageType2").pushedMessage(new CustomMessage("catalog1"));
}
}