gpt4 book ai didi

java - "if"语句与 OO 设计

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:34 27 4
gpt4 key购买 nike

我有枚举说 ErrorCodes

public enum ErrorCodes { 
INVALID_LOGIN(100),
INVALID_PASSWORD(101),
SESSION_EXPIRED(102) ...;

private int errorCode;

private ErrorCodes(int error){
this.errorCode = error;
} //setter and getter and other codes
}

现在我用这个错误代码检查我的异常错误代码。我不想写如果这个做这个,如果这个做这个。我如何解决这个问题(写 10+ if block )

这种情况有什么设计模式吗?

谢谢

最佳答案

您可以使用 if 语句或开关来执行此操作,或者您只是将有问题的逻辑以某种方式实现到 ErrorCode 中。

在面向对象的方式中,这完全取决于您希望应用程序或系统如何对错误代码使用react。假设您只是想让它输出某种对话:

public doSomethingWithError() {

ErrorCodes e = getError();
// the source of error, or originator, returns the enum

switch(e) {
case ErrorCodes.INVALID_LOGIN:
prompt('Invalid Login');
case ErrorCodes.INVALID_PASSWORD:
prompt('Invalid password');
// and so on
}

}

我们可以改为创建一个 ErrorHandler 类来执行此操作:

// We'll implement this using OO instead
public doSomethingWithError() {

ErrorHandler e = getError();
// the originator now returns an ErrorHandler object instead

e.handleMessage();

}

// We will need the following abstract class:
public abstract class ErrorHandler {

// Lets say we have a prompter class that prompts the message
private Prompter prompter = new Prompter();

public final void handleMessage() {
String message = this.getMessage();
prompter.prompt(message);
}

// This needs to be implemented in subclasses because
// handleMessage() method is using it.
public abstract String getMessage();
}

// And you'll have the following implementations, e.g.
// for invalid logins:
public final class InvalidLoginHandler() {

public final String getMessage() {
return "Invalid login";
}

}

// E.g. for invalid password:
public final class InvalidPasswordHandler() {
public final String getMessage() {
return "Invalid password";
}
}

前一种解决方案实现起来很容易,但是随着代码的增长变得越来越难以维护。后一种解决方案更复杂(又名。 Template Method patternOpen-Closed Principle 之后)但允许您在需要时向 ErrorHandler 添加更多方法(例如恢复资源或其他)。您也可以使用 Strategy pattern 来实现它.

您不会完全摆脱条件语句,但在后者中,条件语句被推送到代码中产生错误的部分。这样,您就不会在发起者和错误处理代码处对条件语句进行双重维护。

编辑:

参见 this answer by Michael Borgwardtthis answer by oksayt了解如何在 Java 枚举上实现方法(如果您想这样做的话)。

关于java - "if"语句与 OO 设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3994288/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com