如何使用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; }; |
相關文章
- 呼叫函式實現兩個數交換函式
- 開個腦洞,如何使用 javascript 實現“仿函式”(Functor)?JavaScript函式
- 程式碼重構:函式重構的 7 個小技巧函式
- js 使用建構函式和原型鏈實現繼承操作JS函式原型繼承
- axios為什麼可以使用物件和函式兩種方式呼叫?是如何實現的?iOS物件函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- 使用resilience4j-retry實現函式呼叫重試函式
- Python 兩個內建函式: locals() 和 globals()Python函式
- 三種方法實現strlen函式函式
- 使用函式式方式實現責任鏈模式函式模式
- 使用函式式實現觀察者模式模式函式模式
- 【資料庫】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函式實現去重查詢資料庫SQL函式
- 迴圈單連結串列建構函式、解構函式C++實現函式C++
- 設計模式,你相信嗎,只用兩個函式實現事務!設計模式函式
- 在建構函式內使用call()或apply()實現繼承函式APP繼承
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- 提升逼格的兩個函式函式
- GC和解構函式(Finalize 方法)GC函式
- 建構函式和類函式
- 建構函式與解構函式函式
- 預設建構函式、引數化建構函式、複製建構函式、解構函式函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- C++中建構函式,拷貝建構函式和賦值函式的詳解C++函式賦值
- ton函式函式hash的兩種形式函式
- 利用標準I/O函式,實現兩個檔案的複製功能函式
- 面試題,實現一個求和函式面試題函式
- 一個 Pillow 實現的影像填充函式函式
- 一個 Pillow 實現的影象填充函式函式
- JDK1.8之內建函式式介面(方法引用的實現)JDK函式
- C#使用委託實現函式回撥,方法呼叫攔截C#函式
- vb如何使用ftp函式,vb如何使用ftp函式要知道這些FTP函式
- C++ 建構函式和解構函式C++函式
- 類的建構函式和解構函式函式
- [手寫系列] Spirit帶你實現防抖函式和節流函式函式
- 如何透過建構函式和JPQL生成DTO?函式
- 深入解構objc_msgSend函式的實現OBJGse函式
- 如何在Python中實現函式過載Python函式
- JavaScript的迭代函式與迭代函式的實現JavaScript函式