لطفا جاواسکریپت مرورگر خود را فعال سازید!

نحوه فعال سازی در کروم
  1. ابتدا باید اینکارو بگنید
  2. بعدش اونکارو
نحوه فعال سازی در فایرفاکس
  1. ابتدا باید اینکارو بگنید
  2. بعدش اونکارو
rimoshika

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

rimoshika ۱۳۹۵/۰۵/۲۹ 23 مباحث عمومی برنامه‌نویسی

سلام

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

ممنون.

پاسخ‌ها به این تاپیک
stack programer
stack programer
۱۳۹۵/۰۶/۰۳

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


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


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.
stack programer
stack programer
۱۳۹۵/۰۵/۳۰

سلام شما می توانید از ساختار 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

rimoshika
rimoshika
۱۳۹۵/۰۵/۳۰

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


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

در پاسخ به