使用鍵值對映最佳化程式碼的邏輯
一、 概述:
本文主要以利用Map的鍵值對映特性進行配置相關邏輯為主線逐步展開說明,針對於程式碼中大段的if。。。else條件判斷進行最佳化,提高程式碼的效率和可讀性。另外對此特性進行深度思考後發現,物件轉換時透過Map進行對多個物件的例項進行合併或分解,可以提高程式碼的效率,壓縮程式碼的體積。
綜上所述得出結論:在程式碼最佳化時,除了使用設計模式外,Map的使用也是非常重要的最佳化手段之一。
二、 Map鍵值對映特性描述:
Map提供了一個更通用的元素儲存方法。Map集合類是用於儲存元素對(稱作“鍵”和“值”),其中每個鍵對映到一個值。
三、 條件判斷最佳化場景分析:
1、
根據判斷條件給相關變數賦值:
a) 最佳化方法:將條件配置為Map的鍵(key),將需要修改的值配置為Map的值(value);
b) 原始程式碼:
根據判斷條件給相關變數賦值-原始程式碼
c) 最佳化後代碼:
根據判斷條件給相關變數賦值-最佳化後代碼
2、
根據判斷條件呼叫方法:
a) 呼叫不同物件的同名方法,且方法入參的型別和數量一致,返回值的型別也一致:
i。 最佳化方法:
透過工廠模式最佳化物件初始化過程,利用Map的鍵值對映特性維護判斷條件與物件的關係;
ii。 原始程式碼:
根據判斷條件呼叫不同物件的同名方法-原始程式碼
iii。 最佳化後代碼:
根據判斷條件呼叫不同物件的同名方法-最佳化後代碼
b) 呼叫同一個物件的不同名稱方法,且方法入參的型別和數量一致,返回值的型別也一致:
i。 最佳化方法:
透過工廠模式最佳化物件初始化過程,利用Map的鍵值對映特性維護判斷條件與物件的關係;透過策略模式將所有不同名稱的方法統一為一個同名稱方法;
ii。 經典案例:
Java實現計算器基本功能的案例中,對於計算器按鍵的監聽處理邏輯;
c) 呼叫不同物件的不同名稱方法,且方法入參的型別和數量一致,返回值的型別也一致:
i。 最佳化方法:
利用Map的鍵值對映特性維護判斷條件與物件的關係,同時利用該特性維護判斷條件與呼叫方法的關係,透過Java的反射機制進行方法呼叫;
ii。 呼叫方式:
java。lang。。getDeclaredMethod( name, 。。。 parameterTypes);
3、
對多個物件的例項進行合併或分解:
a) 最佳化方法:
MapToBean(Map2Bean)與BeanToMap(Bean2Map)的轉換過程;
b) 實現方法:
繼承commons-beanutils。jar中的org。apache。commons。beanutils。BeanUtils類,實現不同資料型別或自定義物件與Map的轉換過程;
c) 說明:
BeanUtils主要是封裝了java反射(reflection)和自省(introspection)API,來對JavaBean進行操作。
四、 注意事項:
1、應儘量將Map的鍵值對映單獨在一個統一的類中進行維護;
2、配置類應使用final進行修飾,用以阻止繼承;
3、定義方式如圖所示;
ParamMapping