如何使用设计模式重构代码下方

时间:2018-03-13 10:37:30

标签: java oop design-patterns

我是设计模式的新手,我想问一下如何使用一些设计模式重构代码。

消除冗余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);

    }

非常感谢您的帮助。感谢

1 个答案:

答案 0 :(得分:0)

之前我也遇到过这个问题并且相信Chain-of-responsibility pattern 符合代码中的 if ... else if ... else if ....... else...

链中的每个节点都可以在queueMessage type对象的event上构建{{1}}对象。

希望可以提供帮助。