我有一个类,需要根据事件名称添加其他属性。可以有许多事件名称。如何更好地设计这个类,以便将来支持轻松增强和维护。
public class MessageDecoratorServiceImpl implements MessageaDecorator {
@Override
public BaseMessage addMessageProperties(BaseMessage inputMessage ){
return decorateMessage(inputMessage);
}
BaseMessage decorateMessage(BaseMessage inputMessage) {
if(inputMessage.getEventName().equals("NewSubscription")) {
decorateSubscription(inputMessage);
}else if( inputMessage.getEventName().equals("NewContact") ) {
decorateNewContact(inputMessage);
}
}
BaseMessage decorateSubscription(BaseMessage inputMessage) {
inputMessage.getProperties().put("customFiled", "customValue");
return inputMessage;
}
BaseMessage decorateNewContact(BaseMessage inputMessage) {
inputMessage.getProperties().put("contactCustomFiled", "value");
return inputMessage;
}
}
答案 0 :(得分:0)
您可以按事件类型创建不同的装饰器实现。 它减少了它们之间的耦合。
public class MessageDecoratorSubscription implements MessageDecorator {
@Override
public BaseMessage addMessageProperties(BaseMessage inputMessage ){
inputMessage.getProperties().put("customFiled", "customValue");
return inputMessage;
}
}
public class MessageDecoratorNewContact implements MessageDecorator {
@Override
public BaseMessage addMessageProperties(BaseMessage inputMessage ){
inputMessage.getProperties().put("contactCustomFiled", "value");
return inputMessage;
}
}
并将其命名为:
new MessageDecoratorSubscription(myBaseMessage);
或
new MessageDecoratorNewContact(myBaseMessage);
现在添加/删除/更改事件处理不会影响其他人。
关于这些条件陈述:
if(inputMessage.getEventName().equals("NewSubscription")) {
decorateSubscription(inputMessage);
}else if( inputMessage.getEventName().equals("NewContact") ) {
decorateNewContact(inputMessage);
}
应该避免这样做。这很容易出错
您可以将Map<String, MessageDecorator>
字段替换为事件类型作为键,将装饰器实现替换为值。