For example, like this.
Type code that affects behavior.java
public int getPayAmount() {
switch (getType()) {
case ENGINEER:
return getMonthlySalary();
case SALESMAN:
return getMonthlySalary() + getCommission();
case MANAGER:
return getMonthlySalary() + getBonus();
default:
return 0;
}
}
This is where the type code is determined and different code is executed depending on the result.
Generally, the ʻif --otherand
switch` statements correspond to the parts that are the subject of this time.
If you look at such a code, what you want to do is as follows.
I am trying to replace the parts that are processing differently depending on the judgment result of the type code, but the advantage of this is ↓
★ You can remove knowledge about behavior under different conditions from the client.
=>As a result, when adding a new variation, it becomes possible to respond only by adding the variation.
=>Without polymorphism, you would have to find all the existing conditional branches and add processing to each.
=>This suggests that additional leaks may occur and is a hotbed for failure.
Change before.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE_FOR_EVALUATION_SEND:
//Processing something
break;
case REQUEST_CODE_FOR_SMS_SEND_ACTIVITY:
//Processing something
break;
case REQUEST_CODE_FOR_CAMERA_USAGE:
//Processing something
break;
default:
}
}
After change.java
class ActivityResult {
public static final int REQUEST_CODE_FOR_EVALUATION_SEND = 1;
public static final int REQUEST_CODE_FOR_SMS_SEND_ACTIVITY = 2;
public static final int REQUEST_CODE_FOR_CAMERA_USAGE = 3;
static ActivityResult create(int requestCode) {
switch (requestCode) {
case REQUEST_CODE_FOR_EVALUATION_SEND:
return new ActivityResultEvaluationSend();
case REQUEST_CODE_FOR_SMS_SEND_ACTIVITY:
return new ActivityResultSmsSend();
.. //Same for other codes
}
}
private ActivityResult() {}
abstract int getRequestCode();
}
class ActivityResultEvaluationSend extends ActivityResult {
@Override
public int getRequestCode() {
return ActivityResult.REQUEST_CODE_FOR_EVALUATION_SEND;
}
}
class ActivityResultSmsSend extends ActivityResult {
@Override
public int getRequestCode() {
return ActivityResult.REQUEST_CODE_FOR_SMS_SEND_ACTIVITY;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
ActivityResult result = ActivityResult.create(requestCode);
// @Implement the process in todo result.
}
You have now replaced it with a subclass. This isn't the final form of what I wanted to do, but since it became polymorphism after this, I would implement each process in each subclass. However, I will write it separately.