我是设计模式的新手,我想问一下如何使用一些设计模式重构代码。
消除冗余if-else语句的最佳方法是什么?
这是我的代码:
public void onEvent(Event event) {
RealmModel realm = session.realms().getRealm(event.getRealmId());
UserModel user = session.userCache().getUserById(event.getUserId(), realm);
MQMessage queueMessage = new MQMessage();
queueMessage.setIpAddress(event.getIpAddress());
queueMessage.setModuleCode("MYACC");
queueMessage.setUsername(user.getUsername());
// To be refactored
if (EventType.LOGIN.equals(event.getType())) {
LOGGER.info("USER HAS LOGGED IN");
queueMessage.setSubModuleCode("LOGIN");
queueMessage.setTransactionDetail("Log-in");
try {
queueSender.send(queueMessage);
} catch (JMSException e) {
LOGGER.error(e.getMessage());
}
} else if (EventType.LOGOUT.equals(event.getType())) {
LOGGER.info("USER HAS LOGGED OUT");
queueMessage.setSubModuleCode("LOGOUT");
queueMessage.setTransactionDetail("Log-out");
try {
queueSender.send(queueMessage);
} catch (JMSException e) {
LOGGER.error(e.getMessage());
}
} else if (EventType.UPDATE_EMAIL.equals(event.getType())) {
LOGGER.info("USER HAS UPDATED EMAIL");
queueMessage.setSubModuleCode("");
queueMessage.setTransactionDetail("User has updated his/her email.");
try {
queueSender.send(queueMessage);
} catch (JMSException e) {
LOGGER.error(e.getMessage());
}
} else if (EventType.UPDATE_PASSWORD.equals(event.getType())) {
LOGGER.info("USER HAS UPDATED PASSWORD");
queueMessage.setSubModuleCode("");
queueMessage.setTransactionDetail("User has updated his/her password.");
try {
queueSender.send(queueMessage);
} catch (JMSException e) {
LOGGER.error(e.getMessage());
}
}
events.add(event);
}
非常感谢您的帮助。感谢
答案 0 :(得分:0)
之前我也遇到过这个问题并且相信Chain-of-responsibility pattern
符合代码中的 if ... else if ... else if ....... else...
。
链中的每个节点都可以在queueMessage
type
对象的event
上构建{{1}}对象。
希望可以提供帮助。