偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

使用面向?qū)ο蠛凸δ苄苑椒▉碇貥?gòu)Java應(yīng)用

譯文 精選
開發(fā) 前端
本文將和您討論如何使用面向?qū)ο蠛凸δ苄詢煞N方法,來實(shí)現(xiàn)更好的設(shè)計(jì)與 Java 應(yīng)用重構(gòu),并以繼承和功能性接口的示例形式,展示了兩者在實(shí)現(xiàn)上的區(qū)別。

譯者 | 陳峻

審校 | 孫淑娟

在重構(gòu)方面,Java主要有兩種主要方法,即:面向?qū)ο螅╫bject-oriented)和功能性(functional)。其中,前者幾乎是從Java第一版就存在了,而功能性始于2014年3月推出的Java 1.8。

1.面向?qū)ο蠛凸δ苄苑椒?/h4>

作為一種經(jīng)典的面向?qū)ο笳Z言,Java允許用戶創(chuàng)建靈活的對(duì)象結(jié)構(gòu)。在Java 1.8出現(xiàn)了功能性特性之后,它不僅可以使用對(duì)象或方法,還可以使用lambdas(其本身是可執(zhí)行代碼,https://dzone.com/articles/java-lambda-method-reference)進(jìn)行各項(xiàng)操作。而在功能性的世界中,您可以像在OO的世界中使用對(duì)象那樣,去操作各種功能。

圖片

2.使用OO方法重構(gòu)代碼

通過使用繼承或組合的方式來處理各種接口和類,您可以創(chuàng)建出各種可重用的通用方案,從而減少程序的代碼量,并提高可讀性。如果一個(gè)類滿足了如下的條件,那么它便可以在相同的公共結(jié)構(gòu)中進(jìn)行聯(lián)合:

  • 具有相似的字段,并被識(shí)別為同一實(shí)體
  • 有父/子(parent/children)關(guān)系
  • 有相似目的的方法

3.使用功能性方法重構(gòu)代碼

與OO方法不同,這種方法提取具有相同行為的代碼。例如,我們可以在如下兩個(gè)示例中識(shí)別出相似之處:

  • 在具體實(shí)現(xiàn)上能夠返回相同類型
  • 在具體實(shí)現(xiàn)上有相同的功能

4.使用兩種方法進(jìn)行重構(gòu)的示例

假設(shè)我們有一個(gè)小型應(yīng)用程序,其功能向正式員工(Employee)和合同工(Contractor)支付工資。每次完成支付工資后,我們都會(huì)打印一份Employee報(bào)告,并以不同的格式顯示(https://dzone.com/articles/so-much-data-so-many-formats-a-conversion-service),即:正式員工為JSON格式,而合同工為XML格式。以下便是使用兩種方法重構(gòu)的示例:

圖片

現(xiàn)在讓我們來看一下其默認(rèn)結(jié)構(gòu):

圖片

5.重構(gòu)類的結(jié)構(gòu)

很明顯,Contractor可以成為Employee類的子類。同時(shí),makePayment可以被覆蓋掉。當(dāng)然,我們也可以創(chuàng)建一個(gè)Payable接口和提取makePayment的方法,不過讓我們?cè)诖吮3趾?jiǎn)單化。如下代碼段所示,在重構(gòu)之后,我們產(chǎn)生了一些共同的字段,以及可重用的構(gòu)造函數(shù)。

圖片

6.重構(gòu)功能性

現(xiàn)在我們可以從功能性的角度,來回顧和發(fā)掘源代碼中的相似之處:

圖片

如上圖所示,從打印報(bào)告中可以看出,我們可以使用相同的方式來進(jìn)行處理,即:傳遞一個(gè)對(duì)象,并返回一個(gè)字符串。因此,我們可以將代碼部分提取為一個(gè)可重用的功能,并將其動(dòng)態(tài)地用于該業(yè)務(wù)的邏輯上。我們甚至可以將其拿到該業(yè)務(wù)的外部進(jìn)行使用。

7.創(chuàng)建功能接口

為了判定正確的功能性接口(如,Predicate、Consumer、Function等),我們需要檢查自己的輸入和輸出。在本例中,我們得到的是一個(gè)Object,并需要將其轉(zhuǎn)換為String。

圖片

該接口是由功能函數(shù)提供的。為了更加便于理解,我們用serialize方法創(chuàng)建一個(gè)自有的Converter接口。其對(duì)應(yīng)的代碼如下,具有極強(qiáng)的可讀性:

圖片

8.創(chuàng)建Lambda轉(zhuǎn)換器(Converter)功能性接口

下面,我們可以在功能性接口的基礎(chǔ)上,創(chuàng)建兩個(gè)轉(zhuǎn)換器:JSON和XML。它們都會(huì)去匹配已定義的簽名,即:對(duì)象輸入(Object Input)和字符串輸出(String Output)。

圖片

接著,讓我們?cè)诖a中使用它們:

圖片

9.在Employee類中封裝轉(zhuǎn)換器

與前面的方法類似,我們可以將此功能封裝在Employee父類中,并在內(nèi)部功能函數(shù)中使用它們。下圖展示了如何在Employee類中封裝轉(zhuǎn)換器:

圖片

10.審查最終版本

最后,我們初始化兩個(gè)employee類,并遍歷它們的支付執(zhí)行情況和打印方法。

圖片

我們將最終得到:

  • Employee父類中的Commons字段和方法被重用到了Contractor中
  • 可以在無需更改Employee類的情況下,提取功能函數(shù)轉(zhuǎn)換器(我們可以在未來再做補(bǔ)充)
  • 提取的功能函數(shù)可以在Employee類之外被重用

11.點(diǎn)評(píng)    

總的說來,上述示例并不完美,且有待改進(jìn)。例如,我們可以將Employee與Contractors類隱藏在接口的后面。您也可以試著去寫一個(gè)簡(jiǎn)單的例子,以便只展示一些面對(duì)對(duì)象和功能特性。

當(dāng)然,從嚴(yán)格意義上說,我創(chuàng)建的功能可能并非純功能。而一些開發(fā)人員往往堅(jiān)持認(rèn)為:在Java中只有純功能才是更好的。在此,我持保留意見。

12.小結(jié)    

讓我們對(duì)上述內(nèi)容小結(jié)一下:

使用面向?qū)ο蟮姆椒?,我們可以將性質(zhì)相似(similar-by-nature)的對(duì)象統(tǒng)一到同一個(gè)結(jié)構(gòu)中。

使用功能性方法,我們則可以統(tǒng)一功能相似(similar-by-functionality)的代碼。

這兩種方法都能夠讓程序代碼的可讀性和可維護(hù)性得到顯著提高。

原文鏈接:https://dzone.com/articles/refactoring-java-application-object-oriented-and-f

譯者介紹

陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對(duì)內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專注傳播網(wǎng)絡(luò)與信息安全知識(shí)與經(jīng)驗(yàn);持續(xù)以博文、專題和譯文等形式,分享前沿技術(shù)與新知;經(jīng)常以線上、線下等方式,開展信息安全類培訓(xùn)與授課。

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2018-12-12 08:15:13

物聯(lián)網(wǎng)設(shè)備物聯(lián)網(wǎng)IOT

2011-06-02 09:47:11

C語言重構(gòu)

2022-08-23 09:00:00

Web測(cè)試工具自動(dòng)化

2021-12-29 21:15:08

軟件測(cè)試軟件開發(fā)

2012-05-31 10:24:59

架構(gòu)

2023-08-08 12:32:34

AMD公共云工程

2012-12-13 11:05:42

IBMdW

2010-07-23 10:54:09

優(yōu)化SQL Serve

2010-07-20 09:33:14

Perl方法

2011-06-28 09:53:43

iPhone諾基亞N9

2017-12-04 10:51:06

VMwareAWS

2020-06-09 09:13:12

JavaScript重構(gòu)對(duì)象

2013-06-24 10:21:47

面向?qū)ο?/a>Web應(yīng)用JavaScript

2009-08-13 18:00:48

Eclipse重構(gòu)功能擴(kuò)展點(diǎn)

2009-12-18 11:23:30

Visual Web

2009-06-03 18:33:35

英特爾服務(wù)器Nehalem

2014-11-21 09:17:14

2020-05-08 10:29:49

CIO敏捷低代碼

2023-01-10 09:38:09

面向對(duì)象系統(tǒng)

2021-07-12 15:17:08

機(jī)器學(xué)習(xí)化學(xué)元素氧化態(tài)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)