日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java如何消除太多的if else判斷示例代碼

瀏覽:150日期:2022-09-01 18:37:26

1.簡介

if判斷語句是很多編程語言的重要組成部分。但是,若我們最終編寫了大量嵌套的if語句,這將使得我們的代碼更加復雜和難以維護。

讓我們看看能否使用別的方式來做呢。

設計模式是為了更好的代碼重用性,可讀性,可靠性,可維護性,它有六大原則:

單一職責原則(Single Responsibility Principle,簡稱SRP):該原則是針對類來說的,即一個類應該只負責一項職責. 開放--封閉原則(The Open-Closed Principle簡稱OCP):是說軟件實體(類、模塊、函數等等)應該可以擴展,但是不可以修改。 依賴倒轉原則(Dependence Inversion Principle :針對接口編程,不要對實現編程 里氏代換原則(Liskov Substitution Principle,簡稱LSP):里氏代換原則,子類型必須能夠替換掉他們的父類型 迪米特法則(Law of Demeter):如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用 合成/聚合復用原則(Composition/Aggregation Principle],簡稱CARP):盡量使用合成/聚合,盡量不使用類繼承。合成聚合是“has a”的關系,而繼承是“is a”的關系。

2.示例if..else

public int calculate(int a, int b, String operator) { int result = Integer.MIN_VALUE; if ('add'.equals(operator)) { result = a + b; } else if ('multiply'.equals(operator)) { result = a * b; } else if ('divide'.equals(operator)) { result = a / b; } else if ('subtract'.equals(operator)) { result = a - b; } else if ('modulo'.equals(operator)) { result = a % b; } return result;}

switch-case

public int calculateUsingSwitch(int a, int b, String operator) { int result = 0; switch (operator) { case 'add': result = a + b; break; case 'multiply': result = a * b; break; case 'divide': result = a / b; break; case 'subtract': result = a - b; break; case 'modulo': result = a % b; break; default: result = Integer.MIN_VALUE; } return result;}

3.重構

3.1 工廠方式重構

抽象層Operation.java

public interface Operation { int apply(int a, int b);}

加法實現Addition.java:

public class Addition implements Operation { @Override public int apply(int a, int b) { return a + b; }}

減法實現Subtraction.java

public class Subtraction implements Operation { @Override public int apply(int a, int b) { return a - b; }}

乘法實現Multiplication.java

public class Multiplication implements Operation { @Override public int apply(int a, int b) { return a*b; }}

除法實現Division.java

public class Division implements Operation { @Override public int apply(int a, int b) { return a / b; }}

求余實現Modulo.java

public class Modulo implements Operation { @Override public int apply(int a, int b) { return a % b; }}

工廠類OperatorFactory.java

import java.util.HashMap;import java.util.Map;import java.util.Optional;public class OperatorFactory { static Map<String, Operation> operationMap = new HashMap<>(); static { operationMap.put('add', new Addition()); operationMap.put('divide', new Division()); operationMap.put('multiply', new Multiplication()); operationMap.put('subtract', new Subtraction()); operationMap.put('modulo', new Modulo()); } public static Optional<Operation> getOperation(String operation) { return Optional.ofNullable(operationMap.get(operation)); }}

使用示例

public int calculateUsingFactory(int a, int b, String operator) { Operation targetOperation = OperatorFactory .getOperation(operator) .orElseThrow(() -> new IllegalArgumentException('Invalid Operator')); return targetOperation.apply(a, b);}

3.2 枚舉方式重構

枚舉實現Operator.java

public enum Operator { ADD { @Override public int apply(int a, int b) { return a + b; } }, MULTIPLY { @Override public int apply(int a, int b) { return a * b; } }, SUBTRACT { @Override public int apply(int a, int b) { return a - b; } }, DIVIDE { @Override public int apply(int a, int b) { return a / b; } }, MODULO { @Override public int apply(int a, int b) { return a % b; } }; public abstract int apply(int a, int b);}

封裝Operator到Calculator.java

public int calculate(int a, int b, Operator operator) { return operator.apply(a, b);}

使用示例

@Testpublic void whenCalculateUsingEnumOperator_thenReturnCorrectResult() { Calculator calculator = new Calculator(); int result = calculator.calculate(3, 4, Operator.valueOf('ADD')); assertEquals(7, result);}

3.3 命令模式

抽象的接口

public interface Command { Integer execute();}

實現類

package com.baeldung.reducingIfElse;public class AddCommand implements Command { private int a; private int b; public AddCommand(int a, int b) { this.a = a; this.b = b; } @Override public Integer execute() { return a + b; }}

其它略包裝

public int calculate(Command command) { return command.execute();}

測試demo

@Testpublic void whenCalculateUsingCommand_thenReturnCorrectResult() { Calculator calculator = new Calculator(); int result = calculator.calculate(new AddCommand(3, 7)); assertEquals(10, result);}

3.4 規則引擎重構

抽象規則

public interface Rule { boolean evaluate(Expression expression); Result getResult();}

實現規則AddRule.java 其它略

public class AddRule implements Rule { private int result; @Override public boolean evaluate(Expression expression) { boolean evalResult = false; if (expression.getOperator() == Operator.ADD) { this.result = expression.getX() + expression.getY(); evalResult = true; } return evalResult; } @Override public Result getResult() { return new Result(result); }}

其中:返回結果

public class Result { int value; public Result(int value) { this.value = value; } public int getValue() { return value; }}

表達式

public class Expression { private Integer x; private Integer y; private Operator operator; public Expression(Integer x, Integer y, Operator operator) { this.x = x; this.y = y; this.operator = operator; } public Integer getX() { return x; } public Integer getY() { return y; } public Operator getOperator() { return operator; }}

規則引擎RuleEngine.java

import java.util.ArrayList;import java.util.List;import java.util.Optional;import java.util.stream.Collectors;public class RuleEngine { private static List<Rule> rules = new ArrayList<>(); static { rules.add(new AddRule()); } public Result process(Expression expression) { Rule rule = rules.stream() .filter(r -> r.evaluate(expression)) .findFirst() .orElseThrow(() -> new IllegalArgumentException('Expression does not matches any Rule')); return rule.getResult(); }}

測試demo

@Testpublic void whenNumbersGivenToRuleEngine_thenReturnCorrectResult() { Expression expression = new Expression(5, 5, Operator.ADD); RuleEngine engine = new RuleEngine(); Result result = engine.process(expression); assertNotNull(result); assertEquals(10, result.getValue());}

4.比較

重構方式 SRP OCP DIP LSP LD CARP IF/ELSE N N N N N N 工廠方法 Y Y Y Y Y Y 枚舉方法 N Y Y Y Y Y 命令模式 Y Y Y Y Y Y 規則引擎 Y Y Y Y Y Y

5.小結

 為了更好的代碼重用性,可讀性,可靠性,可維護性,我們會嘗試將IF/ELSE或者case-switch進行改造,使用工廠方法,枚舉方法,命令模式,規則引擎方式不同方法進行嘗試,最后使用設計模式的六大原則對代碼進行評估。

到此這篇關于java如何消除太多的if else判斷的文章就介紹到這了,更多相關java if else 判斷內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
香蕉精品久久| 噜噜噜躁狠狠躁狠狠精品视频| 精品视频免费| 18国产精品| 欧美激情日韩| 极品av在线| 999久久久免费精品国产| 成人羞羞在线观看网站| 久久精品二区三区| 91精品观看| 免费日韩av片| 日产欧产美韩系列久久99| 日本不卡视频在线观看| 69堂免费精品视频在线播放| 久久精品97| 国产一区二区三区91| 日韩高清成人| 久久久噜噜噜| 亚洲欧美日韩国产综合精品二区| 中文字幕日韩高清在线| 日韩av中文字幕一区二区三区| 国产日韩免费| 日韩中文在线播放| 在线综合亚洲| 国产精品啊v在线| 在线中文字幕播放| 久久亚洲欧洲| 成人国产精品| 视频精品一区二区| 久久99免费视频| 欧美.日韩.国产.一区.二区| 国产探花一区| 国产精品久久| 国产精品**亚洲精品| 亚洲精品免费观看| 国产精品久久久久久久免费软件| 精品视频亚洲| 亚洲免费观看高清完整版在线观| 久久精品资源| 亚洲理论在线| 日韩在线中文| 国产精品美女久久久久久不卡| 成人羞羞视频在线看网址| 首页国产欧美日韩丝袜| 国产精品一区高清| 成人av二区| 国产精品magnet| 久久国产电影| 国产精品www.| 视频一区中文字幕精品| 久久中文字幕av| 精品三级在线| 日韩激情精品| re久久精品视频| 精品亚洲美女网站| 精品视频亚洲| 麻豆精品蜜桃视频网站| 青青伊人久久| 亚洲精品影视| 偷拍欧美精品| 99久久亚洲精品| 日韩精品免费一区二区三区| 国产精品天天看天天狠| 日韩影院在线观看| aa亚洲婷婷| 免费精品视频| 日韩午夜av在线| 欧美日韩国产综合网| 国产二区精品| 亚洲色诱最新| 蜜桃免费网站一区二区三区| 国产亚洲在线| 亚洲精品三级| 国产精品一区高清| 国产不卡精品| 激情视频网站在线播放色| 手机在线电影一区| 国产中文字幕一区二区三区| 精品九九久久| 久久久久免费av| 亚洲精品1区2区| 日韩一二三区在线观看| 91精品国产经典在线观看 | 欧美色图一区| 日韩成人亚洲| 婷婷色综合网| 日本高清久久| 老鸭窝一区二区久久精品| 水蜜桃久久夜色精品一区| 久久精品官网| 亚洲一区二区小说| 日韩av在线免费观看不卡| 国产精品毛片视频| 99精品视频在线| 亚洲精品九九| 国产suv精品一区| 中文在线一区| 国产成人精品三级高清久久91| 999精品在线| 日韩在线成人| 久久激情婷婷| 国产精品欧美在线观看| 欧美日韩视频网站| 亚洲精品三级| 99久久久久国产精品| 天堂va欧美ⅴa亚洲va一国产| 国产调教精品| 欧美精品一区二区久久| 国产精品亚洲欧美| 久久香蕉精品| 久久精品国语| 国语对白精品一区二区| 日韩在线麻豆| 欧美在线亚洲| 欧美aa在线观看| 麻豆精品蜜桃视频网站| 亚洲永久精品唐人导航网址| 日韩中文在线电影| 国产日产高清欧美一区二区三区| 久久国产主播| 97精品国产一区二区三区| 久久午夜视频| 激情偷拍久久| 国产夫妻在线| 久久超碰99| 日韩不卡一区二区三区| 欧美资源在线| 欧美网站在线| 91精品国产91久久久久久黑人| 国产福利一区二区三区在线播放| 中文字幕av一区二区三区四区| 99国产精品免费视频观看| 精品国产麻豆| 精品国产a一区二区三区v免费| 国产美女撒尿一区二区| 亚洲啊v在线免费视频| 欧美91精品| 久久麻豆精品| jiujiure精品视频播放| 美女少妇全过程你懂的久久| 日韩免费小视频| 欧美日韩在线二区| 99精品视频在线| 女同性一区二区三区人了人一 | 国产精品九九| 国产精品视频一区二区三区综合| 日韩欧美2区| 国产精品一区二区中文字幕| 久久精品国内一区二区三区| 日本成人在线网站| 麻豆视频一区| 日本韩国欧美超级黄在线观看| 国产一区清纯| 日韩精品久久理论片| 国产精品videossex| 国产不卡人人| 每日更新成人在线视频| 青青国产91久久久久久| 国产suv精品一区二区四区视频 | 成人av二区| 国产精品一区二区精品视频观看 | 久久国产乱子精品免费女| 午夜影院一区| 日韩免费福利视频| 麻豆mv在线观看| 捆绑调教日本一区二区三区| 六月婷婷综合| av亚洲免费| 日本 国产 欧美色综合| 久久夜色精品| 久久国产精品色av免费看| 精品久久99| 亚洲欧美网站| 久久a爱视频| 欧美va天堂在线| 视频小说一区二区| 午夜在线播放视频欧美| 国产精品日本一区二区不卡视频| 色一区二区三区四区| 蜜桃精品在线| 日韩成人一级| 久久久精品午夜少妇| 视频一区中文字幕精品| 岛国av免费在线观看| 久热综合在线亚洲精品| 国产美女视频一区二区| 成人黄色av| 日韩精品第一| 日韩精品dvd| 日韩欧美中文字幕电影| 欧美中文字幕一区二区| 国产麻豆精品久久| 成人精品天堂一区二区三区| 日韩精彩视频在线观看| 麻豆成人av在线| 丝袜亚洲精品中文字幕一区| 国产精品v亚洲精品v日韩精品 | 麻豆精品蜜桃| 久久国产免费看| 久久亚洲国产精品一区二区|