如何使用OO和函式式兩個方法實現重構? - DZone
Java 中的重構有很多方面,但其中有兩個基礎:物件導向和函式式。物件導向幾乎從第一個 Java 版本開始就存在,而函式式只出現在 Java 1.8(2014 年 3 月)中。
Java 是一種經典的物件導向語言,允許建立靈活的物件結構。在 Java 1.8 獲得功能特性之後,它不僅可以使用物件或方法,還可以使用lambdas(它本身就是可執行程式碼)進行操作。在函式世界中,您可以像在 OO 世界中使用物件一樣操作函式。
重構最佳實踐:
- 使用物件導向的方法將性質相似的物件統一在一個結構中
- 使用函式方法來統一函式相似的程式碼。它們一起使程式碼的可讀性和可維護性顯著提高。
使用 OO 方法重構程式碼
使用繼承或組合來處理介面和類,您可以建立可重用的通用解決方案,從而減少程式碼量並提高可讀性。類可以在相同的公共結構中聯合,如果它們:
- 具有相似的欄位並被識別為同一實體
- 有關係父母/孩子
- 有類似目的的方法
使用函式式方法重構程式碼
與 OO 方法不同,這種方法提取具有相同行為的程式碼。例如,我們可以在下一個示例中識別相似之處:
- 實現具有相同的返回型別
- 實現具有相同的函式
假設我們有一個小型應用程式,它向永久和合同員工付款。每次付款後,我們都會列印一份報告Employee並顯示不同格式的資料(永久和承包商的 JSON 和 XML)。
案例使用的程式碼 可在此處獲得。
- Contractor和Employee有類似結構
- Contractor可以重構成為Employee類的孩子
上面這段程式碼中還有相似的功能:轉換到JSOn和轉到XML:
我們傳遞一個物件並返回一個字串。因此,我們可以將該程式碼提取為一個可重用的函式,並將其動態地用於此業務邏輯,甚至在它之外使用。
為了決定正確的 函式介面(例如,Predicate、Consumer、Function 等),我們需要檢查我們的輸入和輸出。在我們的例子中,我們得到一個Object 並將其轉換為String。
@FunctionalInterface interface Converter<T, R> { R serialize(T var1); } |
有了一個函式介面,我們建立了兩個Converters:json 和 xml。它們都將匹配定義的簽名(物件輸入和字串輸出)。
final static Converter<Object, String> JSON_CONVERTER = (object) -> { Gson gson = new Gson(); return gson.toJson(object); }; final static Converter<Object, String> XML_CONVERTER = (object) -> { XmlMapper xmlMapper = new XmlMapper(); try { return xmlMapper.writeValueAsString(object); } catch (JsonProcessingException e) { e.printStackTrace(); } return null; }; |
相關文章
- 呼叫函式實現兩個數交換函式
- 如何實現函式返回多個值函式
- 程式碼重構:函式重構的 7 個小技巧函式
- 開個腦洞,如何使用 javascript 實現“仿函式”(Functor)?JavaScript函式
- Sql字串分組Split函式的兩種實現方法SQL字串函式
- js 使用建構函式和原型鏈實現繼承操作JS函式原型繼承
- (函式)實現strstr函式函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- ORACLE常用結構和函式使用方法總結Oracle函式
- 使用resilience4j-retry實現函式呼叫重試函式
- 使用函式式實現觀察者模式模式函式模式
- 三種方法實現strlen函式函式
- 使用分析函式實現累加和移動平均函式
- 使用函式式方式實現責任鏈模式函式模式
- javascript如何實現函式過載JavaScript函式
- 一個有用的函式-實現dump函式的convert!函式
- Python 兩個內建函式: locals() 和 globals()Python函式
- 設計模式,你相信嗎,只用兩個函式實現事務!設計模式函式
- scala 函式和方法函式
- 迴圈單連結串列建構函式、解構函式C++實現函式C++
- 不使用日期函式實現ADD_MONTHS函式功能函式
- 利用ORACLE的MINUS函式和OVER函式,直接通過檢視實現兩個記錄集的比較。(轉載)Oracle函式
- 重構——42函式改名(RenameMethod)函式
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- round函式與trunc函式的使用方法函式
- 【函式】Oracle中聚合函式rank()使用方法函式Oracle
- 提升逼格的兩個函式函式
- 不使用日期函式實現ADD_MONTHS函式功能(二)函式
- 面試題,實現一個求和函式面試題函式
- jQuery如何實現新增自定義函式jQuery函式
- 直譯器構造實現函式呼叫函式
- 在建構函式內使用call()或apply()實現繼承函式APP繼承
- JavaScript建構函式和普通函式的區別JavaScript函式
- 判斷函式和方法函式
- OC的方法和 函式函式
- 建構函式與解構函式函式
- 【資料庫】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函式實現去重查詢資料庫SQL函式
- 使用bind()函式的產生的函式用作建構函式this的指向函式