Java OOP风格的命令-代码段
使此代码段更面向对象的最佳方法是什么Java OOP风格的命令-代码段,java,oop,object,styles,Java,Oop,Object,Styles,使此代码段更面向对象的最佳方法是什么 public class Formatter { private Service service; public Formatter(Service service) { this.service = service; } public String doTheJob(String theInput) { String response = service.askForPermission
public class Formatter {
private Service service;
public Formatter(Service service) {
this.service = service;
}
public String doTheJob(String theInput) {
String response = service.askForPermission();
switch (response) {
case "FAIL":
return "error";
case "OK":
return String.format("%s%s", theInput, theInput);
default:
return null;
}
}
}
如果您的代码不需要更复杂,那么您不应该更改任何内容 但是如果你写一个原则的例子,我认为这是一个很好的例子,可以使用一些“工厂/委托”模式。原则是为所有案例创建一个带有子类的类。然后您注册每个案例,并使用一个方法来选择要在响应中使用的好类。使用这种方法,您不必使用对纯粹主义者来说“不太面向对象”的开关/案例 您的代码可能具有以下原则(请注意,它只是一个用于说明该原则的代码):
抽象类作业{
作业的公共抽象字符串(输入字符串);
}
类FailJob扩展了作业{
作业的公共字符串(输入字符串){
返回“错误”;
}
}
类OKJob扩展了Job{
作业的公共字符串(输入字符串){
返回String.format(“%s%s”,输入,输入);
}
}
类NullJob扩展了作业{
作业的公共字符串(输入字符串){
返回null;
}
}
类格式化程序{
私人服务;
私人地图工作;
公共格式化程序(服务){
服务=服务;
//开始工作
jobs=newhashmap();
jobs.put(“FAIL”,new FailJob());
jobs.put(“OK”,new-OKJob());
}
作业的公共字符串(输入字符串){
字符串响应=service.askForPermission();
Job Job=获取作业(响应);
返回job.doTheJob(输入);
}
私有作业获取作业(字符串响应){
Job=jobs.get(响应);
如果(作业==null){
job=新的NullJob();
}
返回工作;
}
}
但是,再一次,如果你的代码是你所要做的全部,坚持使用它,那就简单多了。你的问题不是典型的StackOverflow答案,因为它需要一个“意见”。考虑在<强>代码审查< /强>上发布更好的答案。 尽管如此,我还是建议进行这些更改
Object
作为参数。这将使您的API更加方便-无需额外成本,因为String.format
execpts对象作为参数PermissionChecker
或更具体的东西。这将帮助其他人理解您的代码并找到相关的代码段public class Formatter {
private PermissionChecker permissionChecker;
public Formatter(PermissionChecker permissionChecker) {
this.permissionChecker = permissionChecker;
}
public String doTheJob(Object theInput) {
// check permission, fail with exception, if something goes wrong
permissionChecker.assertFormattingPermission();
return String.format("%s%s", theInput, theInput);
}
}
面向对象是一种技术,而不是goal@reaanb这完全可能是一个目标。“如何将面向对象应用于此代码”不是一个奇怪的问题。然而,这个问题对于StackOverflow来说太广泛了。为什么需要更改代码?它看起来很简单,当然不需要“更面向对象”。@VinceEmigh如果它的目的未知,它不应该成为一个目标。看看实际的代码,这个问题对我来说没有多大意义。它相当原子化。我看不出面向对象建模的主题是如何与这么短、简单的一段代码联系在一起的。更不清楚的是为什么。@Vince与“使此代码更程序化的最佳方法是什么?”相比,为什么会有人想这样做?太多人相信OOP就是一切好东西。现在,如果有必要,例如在不同的格式化程序上进行抽象,我很乐意应用OOP技术。