Если ваш код не должен быть более сложным, вы ничего не должны менять.
Но если вы пишете пример принципа, я думаю, что это хороший пример, где можно использовать шаблон «Factory/Delegation». Принцип заключается в создании класса с классом children для всех ваших случаев. Затем вы регистрируете все случаи и используете метод, чтобы выбрать, какой хороший класс использовать с вашим ответом. С помощью этого метода вам не нужно использовать переключатель/case, который «не очень ориентирован на объекты» для пуристов.
Ваш код может быть что-то со следующим принципом (будьте осторожны, это просто код, чтобы проиллюстрировать принцип):
abstract class Job {
public abstract String doTheJob(String theInput);
}
class FailJob extends Job {
public String doTheJob(String theInput) {
return "error";
}
}
class OKJob extends Job {
public String doTheJob(String theInput) {
return String.format("%s%s", theInput, theInput);
}
}
class NullJob extends Job {
public String doTheJob(String theInput) {
return null;
}
}
class Formatter {
private Service service;
private Map<String, Job> jobs;
public Formatter(Service service) {
this.service = service;
// init the jobs
jobs = new HashMap<String, Job>();
jobs.put("FAIL", new FailJob());
jobs.put("OK", new OKJob());
}
public String doTheJob(String theInput) {
String response = service.askForPermission();
Job job = getTheJob(response);
return job.doTheJob(theInput);
}
private Job getTheJob(String response) {
Job job = jobs.get(response);
if(job == null) {
job = new NullJob();
}
return job;
}
}
Но, опять же, если ваш код все, что вам нужно сделать, застрял это проще.
ориентация объекта является метод, а не цель – reaanb
@reaanb Это может полностью быть целью. «Как применить ориентацию объекта к этому коду» - это не странный вопрос. Этот вопрос, однако, слишком широк для StackOverflow. –
Зачем вам нужно менять код? Это кажется довольно простым и, разумеется, не нужно быть «более объектно ориентированным». – Orch