Die Switch-Methode hat einen guten Einfluss auf die Verarbeitung von Aufzählungswerten. Für unterschiedliche Auftragsstatus müssen beispielsweise unterschiedliche Verarbeitungen durchgeführt werden, da die Statuswerte begrenzt sind. dann können wir switch direkt verwenden, um unterschiedliche Verarbeitungen für verschiedene Zustände durchzuführen:
Originalaussage
public void before(Integer status) { if(status == 1){ System.out.println("订单未接单"); }else if(status == 2){ System.out.println("订单未发货"); }else if(status == 3){ System.out.println("订单未签收"); }else{ System.out.println("订单已签收"); } }
switch
public void greater(Integer status) { switch (status){ case 1: System.out.println("订单未接单"); break; case 2: System.out.println("订单未发货"); break; case 3: System.out.println("订单未签收"); break; default: System.out.println("订单已签收"); } }
Zusammenfassung:
# 🎜🎜 Die #switch-Anweisung eignet sich für Szenarien, in denen die Beurteilungsbedingungen begrenzt sind, keine komplexen Berechnungen erforderlich sind und die Verarbeitungsanweisung einfach ist. Wenn unsere Beurteilungsbedingungen eine Reihe komplexer Berechnungen erfordern oder die Logik der Verarbeitungsanweisungen relativ komplex ist, müssen wir andere Verarbeitungsmethoden in Betracht ziehen. Schließlich ist das Schreiben vieler Verarbeitungsanweisungen in dem Fall nicht bequem. 🎜🎜#2. FunktionsschnittstelleWenn es um komplexere Verarbeitungslogiken geht, ziehen wir es vor, diese Verarbeitungslogiken separat zu trennen, anstatt sie in einer Methode zu verarbeiten, was die allgemeine Lesbarkeit und Entkopplung erhöht Dort haben wir auch das Muster abgeleitet, funktionale Schnittstellen zur Verarbeitung von „if else“ zu verwenden Verschiedene Methoden werden über einheitliche Beurteilungsbedingungen aufgerufen. Die spezifischen Beispiele lauten wie folgt:@Component public class FunctionInterfaceStrategy { /** * key 方法参数,多个参数可以自定义一个实体类处理 * value 方法返回值 */ private Map<Integer, Function<Object,Boolean>> operationMap; @PostConstruct private void init(){ operationMap = new HashMap<>(); operationMap.put(1,this::takeOrder); operationMap.put(2,this::sendOrder); operationMap.put(3,this::signOrder); operationMap.put(4,this::finishOrder); } public Boolean doOperation(Object params,Integer status){ return operationMap.get(status) == null || operationMap.get(status).apply(params); } private Boolean takeOrder(Object params){ // TODO 比较复杂的处理逻辑 System.out.println("订单未接单"); return true; } private Boolean sendOrder(Object params){ // TODO 比较复杂的处理逻辑 System.out.println("订单未发货"); return true; } private Boolean signOrder(Object params){ // TODO 比较复杂的处理逻辑 System.out.println("订单未签收"); return true; } private Boolean finishOrder(Object params){ // TODO 比较复杂的处理逻辑 System.out.println("订单已签收"); return true; } }
@Autowired private FunctionInterfaceStrategy functionInterfaceStrategy; functionInterfaceStrategy.doOperation("参数",1);
Was wir oben gezeigt haben, ist natürlich eine funktionale Schnittstelle mit Parametern und Rückgabewerten. In der tatsächlichen Produktion benötigen wir möglicherweise auch andere Formen von funktionalen Schnittstellen, die wir separat auflisten Referenz
SchnittstellennameBeschreibungSupplier | Keine Parameter, Rückgabewert | get |
---|---|---|
# 🎜🎜#Consumer#🎜 🎜# | Mit Parametern, kein Rückgabewertaccept | |
#🎜 🎜#Keine Parameter, nein Rückgabewert | run | |
Bei Parametern gibt es einen Rückgabewert#🎜 🎜##🎜 🎜#apply | 3. Strategiemuster | |
Die Form des Strategiemusters eignet sich für Situationen, in denen die Implementierungsmethode komplexer ist, und für sauberere Szenarien, in denen die Verarbeitungslogik entkoppelt werden muss | # 🎜🎜#1. Wir müssen eine Schnittstellenklasse erstellen, um das Format unserer nachfolgenden Implementierungsklassen anzugeben Strategie-Factory-Klasse zum Hosten der Implementierungsklasse | 4. Methodenaufruf |
Welches letztendlich zu verwenden ist, hängt von der spezifischen Geschäftssituation ab.
4. Schutzanweisung
Wir müssen häufig verschiedene Parameterverschachtelungen vor der Beurteilungslogik verarbeiten , wenn die Bedingungen nicht erfüllt sind, wird es direkt zurückgegeben. In diesem Fall wird eher empfohlen, die Guard-Anweisung zu verwenden, um
Original-Anweisung
@Component @AllArgsConstructor public class OrderStrategyFactory { private final List<OrderStrategy> orderStrategyList; private static Map<Integer,OrderStrategy> strategyMap = new HashMap<>(); @PostConstruct private void init(){ for (OrderStrategy orderStrategy : orderStrategyList) { strategyMap.put(orderStrategy.getType(),orderStrategy); } } /** * 执行方法 * @param status * @param params * @return */ public Boolean handler(Integer status,Object params){ return strategyMap.get(status).handler(params); } }
Guard-Anweisung zu verwenden
@RestController @RequestMapping("ifelse") @AllArgsConstructor public class IfElseController { private final OrderStrategyFactory orderStrategyFactory; @GetMapping("strategy") public Boolean strategy(Integer status){ return orderStrategyFactory.handler(status,"1"); } }
Das obige ist der detaillierte Inhalt vonWie man if-else elegant in Java schreibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!