過多if-else分支的優化
JAVA程式經常看到一個函式中包含了十幾個if-else的分支判斷
比如 根據不同職位增加工資的例子
可以改寫如下
如果是複雜的專案,可以把匿名內部類改為普通類.
改寫之後,無論新增或者刪除邏輯,都非常的簡單明瞭,並且邏輯的變更,限制在了一個較小的範圍.
實現了高內聚,低耦合的設計思路.
參考:
http://raychase.iteye.com/blog/1814187
比如 根據不同職位增加工資的例子
-
public class Employee {
-
private int salary = 10;
-
-
public void addMoney(String str) {
-
if ("初級JAVA程式設計師".equals(str)) {
-
this.salary = salary + 30;
-
} else if ("中級JAVA程式設計師".equals(str)) {
-
this.salary = salary + 50;
-
} else if ("高階JAVA程式設計師".equals(str)) {
-
this.salary = salary + 80;
-
} else if ("架構師".equals(str)) {
-
this.salary = salary + 100;
-
} else if ("資料庫管理員".equals(str)) {
-
this.salary = salary + 100;
-
} else if ("專案經理".equals(str)) {
-
this.salary = salary + 100;
-
} else if ("菜鳥".equals(str)) {
-
this.salary = salary + 10;
-
}
-
// ...
-
System.out.println(this.salary);
-
}
-
-
public static void main(String[] args) {
-
Employee e = new Employee();
-
e.addMoney("菜鳥");
-
}
- }
-
import java.util.HashMap;
-
import java.util.Map;
-
-
public class Employee {
-
private int salary = 10;
-
-
private interface IStrategy {
-
int addMoney();
-
};
-
-
Map<String, IStrategy> strategy = new HashMap<String, IStrategy>();
-
-
{
-
strategy.put("初級JAVA程式設計師", new IStrategy() {
-
@Override
-
public int addMoney() {
-
return 30;
-
}
-
});
-
-
strategy.put("中級JAVA程式設計師", new IStrategy() {
-
@Override
-
public int addMoney() {
-
return 50;
-
}
-
});
-
-
strategy.put("高階JAVA程式設計師", new IStrategy() {
-
@Override
-
public int addMoney() {
-
return 80;
-
}
-
});
-
-
strategy.put("架構師", new IStrategy() {
-
@Override
-
public int addMoney() {
-
return 100;
-
}
-
});
-
-
strategy.put("資料庫管理員", new IStrategy() {
-
@Override
-
public int addMoney() {
-
return 100;
-
}
-
});
-
-
strategy.put("專案經理", new IStrategy() {
-
@Override
-
public int addMoney() {
-
return 100;
-
}
-
});
-
-
strategy.put("菜鳥", new IStrategy() {
-
@Override
-
public int addMoney() {
-
return 10;
-
}
-
});
-
-
}
-
-
public void addMoney(String str) {
-
this.salary = salary + strategy.get(str).addMoney();
-
System.out.println(this.salary);
-
}
-
-
public static void main(String[] args) {
-
Employee e = new Employee();
-
e.addMoney("菜鳥");
-
}
- }
改寫之後,無論新增或者刪除邏輯,都非常的簡單明瞭,並且邏輯的變更,限制在了一個較小的範圍.
實現了高內聚,低耦合的設計思路.
參考:
http://raychase.iteye.com/blog/1814187
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1409748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實戰if-else 過多詳解
- if-else程式碼優化的八種方案優化
- Java優化if-else程式碼幾個解決方案Java優化
- if-else if-else 的用法
- 分支對程式碼效能的影響和優化優化
- 利用策略模式優化過多 if else 程式碼模式優化
- 程式分析與優化 - 11 多分支分析優化
- MySQL 資料過多時的優化--圖文並茂版MySql優化
- Java程式設計技巧:if-else優化實踐總結歸納Java程式設計優化
- Android優化幀動畫過程中的多執行緒模型思考Android優化動畫執行緒模型
- 如何優化多個關鍵詞?分享多關鍵詞優化心得優化
- 效能優化的過程學習優化
- Oracle優化案例-儲存過程的優化思路(二十三)Oracle優化儲存過程
- Verilog RTL優化策略(一):推薦使用assign語法替代if-else和case語法優化
- 最容易懂的策略模式消除if-else分支,實現開閉原則,提高可擴充套件性模式套件
- 前端多資料渲染優化前端優化
- 用多項式的逆優化dp總結優化
- Git操作 :從一個分支cherry-pick多個commit到其他分支GitMIT
- spark task與stage數量過多調優Spark
- Java 效能優化之——效能優化的過程方法與求職面經總結Java優化求職
- Laravel 專案深度優化過程Laravel優化
- 通過新增條件優化SQL優化SQL
- 用流程化表單的多個優勢實現流程化管理
- Mysql多欄位大表的幾種優化方法MySql優化
- 不切換 Git 分支,卻能同時在多個分支上工作,我是怎麼做到的?Git
- Mysql多列索引建立與優化.mdMySql索引優化
- 如何更優雅地切換 Git 分支Git
- 多個分支機構聯網SDN方案
- JVM優化過頭了,直接把異常資訊優化沒了?JVM優化
- 高手過招「效能優化/純手寫SpringMVC框架/MySql優化/微服務」優化SpringMVC框架MySql微服務
- SEO優化過程中容易發生的誤區優化
- 詳細說明搜尋引擎優化的過程優化
- 記canvas畫筆筆跡的多次優化過程Canvas優化
- 通過Scope Hoisting優化Webpack輸出優化Web
- 如何優化產品開發過程?優化
- APEX重定向頁(通過分支判斷)
- Solon 1.5.16 釋出,多項細節優化優化
- appium多裝置,重連優化開源APP優化
- Git 分支 - 分支的新建與合併Git