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

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

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

瀏覽:145日期: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久久,三上悠亚国产精品一区二区三区
亚洲性色视频| 日韩精品电影| 欧美日本久久| 丝袜诱惑制服诱惑色一区在线观看| www.com.cn成人| 麻豆国产91在线播放| 国产精品成人一区二区不卡| 国产精品嫩模av在线| 国产综合亚洲精品一区二| 亚洲调教视频在线观看| 日韩av首页| 日韩综合小视频| 欧美国产免费| 激情综合五月| 中文字幕一区二区av| 里番精品3d一二三区| 麻豆视频观看网址久久| 精品亚洲成人| 精品一区在线| 免费av一区二区三区四区| 狠狠爱成人网| 国产亚洲精品精品国产亚洲综合| 欧美一级全黄| 欧美aa一级| 亚洲一级网站| 一区二区三区四区日韩| 日韩二区三区在线观看| 久久精品国产亚洲一区二区三区| 91亚洲国产高清| 视频在线观看国产精品| 少妇高潮一区二区三区99| 国产日本久久| 日韩三区免费| 妖精视频成人观看www| 国产毛片精品| 精品视频网站| 午夜日本精品| 国产日韩欧美一区二区三区在线观看| 日韩av在线播放网址| 国产精品婷婷| 国产乱人伦丫前精品视频 | 国产亚洲精品久久久久婷婷瑜伽| 日本一区二区三区中文字幕| 欧美日韩国产观看视频| 婷婷激情综合| 国产精品xxx在线观看| 91免费精品| 四虎国产精品免费久久| 秋霞影视一区二区三区| 日韩三区四区| 亚洲午夜精品久久久久久app| 天堂va欧美ⅴa亚洲va一国产| 三级在线看中文字幕完整版| 免费黄网站欧美| 亚洲成人不卡| 国产精品日本一区二区三区在线| 波多野结衣一区| 久久精品午夜| 蜜桃一区二区三区在线| 国产精品伦理久久久久久| 亚洲影视一区二区三区| 麻豆91精品视频| 国产亚洲激情| 丝袜美腿一区| 麻豆国产一区| 蜜桃久久av一区| 91精品国产91久久久久久黑人| 日本亚洲视频| 天堂√8在线中文| 国产精品入口久久| 亚洲精品美女| 国产精品试看| 欧美中文一区二区| 都市激情国产精品| 欧美午夜网站| 视频精品一区二区| 亚洲精品.com| 成人在线免费观看91| 婷婷精品久久久久久久久久不卡| 欧美成人亚洲| 日韩中文在线电影| 精品亚洲a∨一区二区三区18| 日韩欧美中文字幕一区二区三区| 亚洲一级影院| 日韩欧美午夜| 精品日本视频| 国产精品色婷婷在线观看| 日韩美女精品| 亚洲精品少妇| 婷婷亚洲精品| 69精品国产久热在线观看| 男人操女人的视频在线观看欧美| 最新国产拍偷乱拍精品| 免费视频国产一区| 久久一区二区三区喷水| 日韩视频网站在线观看| 成人在线丰满少妇av| 精品日韩在线| 日韩中文欧美| 精品一区毛片| 天堂av在线一区| 亚洲深夜福利| 久久精品影视| 91精品国产成人观看| 亚洲v在线看| 日韩午夜高潮| 激情欧美国产欧美| 91超碰国产精品| 亚洲精品99| 国产精品婷婷| 日韩综合一区二区| 国产欧美日本| 在线一区av| jiujiure精品视频播放| 丝袜国产日韩另类美女| 日韩国产一二三区| 麻豆精品视频在线观看免费| 高清一区二区| 亚洲午夜在线| 日日夜夜免费精品视频| 欧美激情福利| 国内揄拍国内精品久久| 伊伊综合在线| 在线日韩av| 噜噜噜久久亚洲精品国产品小说| 亚洲日本国产| 久久精品一本| 日韩精品网站| 日av在线不卡| 国产精品久久久久久久久久白浆 | 日本中文字幕视频一区| 免费在线亚洲欧美| 日韩欧美综合| 国产亚洲精品v| 国产欧美高清| 美女av在线免费看| 婷婷色综合网| 欧美日本久久| 欧美香蕉视频| 亚洲资源网站| 久久精品国内一区二区三区| 久久精品国产68国产精品亚洲| 免费精品视频| 你懂的国产精品永久在线| 1000部精品久久久久久久久| 水蜜桃久久夜色精品一区的特点 | 欧美精品国产| 久久久777| 日本在线观看不卡视频| 色一区二区三区四区| 伊人精品在线| 国产精品地址| 欧美精品一二| 欧美日韩视频免费看| 久久久精品久久久久久96| 日本伊人久久| 精品日韩毛片| 卡一精品卡二卡三网站乱码| 最新日韩欧美| 日韩88av| 欧美精品三级在线| 丝袜av一区| 国产精品3区| 麻豆亚洲精品| 伊人久久在线| 国产精品一区二区三区四区在线观看| 国产一区久久| 精品国产精品久久一区免费式 | 亚洲欧洲日本mm| 国产精品免费不| 一区二区视频欧美| 精品一级视频| 亚洲日产国产精品| 99久久婷婷| 精品女同一区二区三区在线观看| 亚洲综合中文| 狠狠干成人综合网| 中文字幕在线看片| 奇米狠狠一区二区三区| 夜夜精品视频| 久久久久久久久99精品大| 麻豆视频观看网址久久| 日韩精品视频网站| 亚洲一区免费| 免费国产自久久久久三四区久久| 韩日一区二区| 欧美欧美黄在线二区| 亚洲一区二区三区高清| 久久免费国产| 日韩国产专区| 久久99免费视频| 欧美一区影院| 亚洲精品看片| 丝袜国产日韩另类美女| 激情婷婷综合| 亚洲一级二级| 91精品久久久久久久久久不卡| 成人在线免费观看91| 欧美成人aaa| 美女国产一区二区三区|