راه حل برای switch case های طولانی در جاوا ا.

سلام

توی برنامم یه سوییچ کیس طولانی هست با بیش از 20 تا کیس که برای هر کیسی هم یه متد متفاوت صدا زده میشه یعنی برای هر کیسی یک کار متفاوتی انجام میشه.برای کوتاه کردن این سوییچ کیس چه راهی دارم؟

ممنون.

پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 8 سال پیش

سلام شما می توانید از ساختار enum ها استفاده کنید.

ساختار سوییچ کیس

switch (commandType) {
            case COMMAND_LOGIN:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_MAKE_READY:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_MAKE_NOT_READY:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_MAKE_NOT_READY_WITH_REASON:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_LOGOUT_WITH_REASON:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_ANSWER_CALL:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_HOLD_CALL:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_RETRIEVE_CALL:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_END_CALL:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_TRASFER_SST_CALL:
                command = getCommand(commandType, agentId);
                break;

            case COMMAND_CONSULT_CALL:
                command = getCommand(commandType, agentId);
                break;
                 .
                 .
                 .
                 .
                 .
           default :
                command = "";
                break;

        }//end switch

 

که  به جای این سوییچ کیس طولانی یک enum تعریف کرده وساختار کوچکتری شده

public enum CommandType{
        COMMAND_HOLD_CALL(0), 
        COMMAND_RETRIEVE_CALL(1), 
        .....
        COMMAND_RETRIEVE_CALL(55),
        COMMAND_MAX(56),
        ;
        private int commandId;

        private CommandType(int commandId){
            this.commandId= commandId;
        }      
        public int getValue(){
            return this.commandId;
        }
    }
}

 

که این تکه کد زیر جایگرین سوییچ کیس مون شده است .

if(commandType.getValue()<CommandType.COMMAND_MAX.getValue()){ // The range is from  0 to 55
      command = getCommand(commandType, agentId);
}else{
      command = "";
}

http://codereview.stackexchange.com/questions/74743/refactoring-a-long-switch-statement-in-java

sokanacademy forum
کاربر سکان آکادمی 8 سال پیش

ممنون،منم این کد رو دیده بودم ولی مشکل من این هستش که برای هر کیسی یه متد متفاوت صدا زده میشه مثلن برای هر commandی باید متد مخصوصی صدا زده بشه ،به فرض برای کامند خروج متدی به نام خروج و برای کامند ریست متدی به نام ریست.

نمیدونم کدوم الگو به کارم میاد ولی حس میکنم الگوی استراتژی میتونه باشه که من آشنایی زیادی باش ندارم.

sokanacademy forum
کاربر سکان آکادمی 8 سال پیش

سلام ببخشید دیر شد،

اره این لینک یکی از بهترین سایت برای یادگیری اسان است

http://www.tutorialspoint.com/design_pattern/strategy_pattern.htm

 Strategy pattern, a class behavior or its algorithm can be changed at run time. This type of design pattern comes under behavior pattern.
online-support-icon