2 7 引入外加函式

2022-06-02 11:27:07 字數 899 閱讀 1442

場景

你需要為提供服務的類增加乙個函式,但你無法修改這個類。在客戶類中建立乙個函式,並以第一引數形式傳入乙個服務類例項。

動機2.1 如果真的用心體會過,這種事情應該發生太多次了。你正在使用乙個類,它真的很好,為你提供了需要的所有服務。

而後,你又需要一項新服務,這個類卻無法**。於是你開始咒罵「為什麼不能做這件事?」如果可以修改原始碼,你便可以自行新增乙個新函式;

如果不能,你就得在客戶端編碼,補足你要的那個函式。

2.2 如果客戶類只使用這項功能一次,那麼額外編碼工作沒什麼大不了,甚至可能根本不需要原本提供服務的那個類。

然而,如果你需要多次使用這個函式,就得不斷重複這些**。重複**是軟體萬惡之源。這些重複**應該被抽出來放進乙個函式中。

進行本項重構時,如果你以外加函式實現一項功能,那就是乙個明確訊號:這個函式原本應該在提供服務的類中實現。

2.3

如果你發現自己為乙個服務類建立了大量外加函式,或者發現有許多類需要同樣的外加函式,就不應該再使用本項重構,而應該使用 introduce local extension [2.8 引入本地擴充套件]。

但是不要忘記:外加函式終歸是權宜之計。如果有可能,你仍然應該將這些函式搬移到它們的理想家園。

如果由於**所有權的原因使你無法做這樣的搬移,就把外加函式交給服務類的提供者,請他幫你在服務類中實現這個函式。

做法1、在客戶類中建立乙個函式,用來提供你需要的功能。這個函式不應該呼叫客戶類的任何特性。如果它需要乙個值,把該值動作引數傳給它。

2、以服務類例項作為該函式的第乙個引數。

3、將該函式注釋為:」外加函式「,應在服務類中實現。這麼一來,如果將來有機會將外加函式搬移到服務類時,你便可以輕鬆找出這些外加函式。

good good study, day day up.

順序 選擇 迴圈 總結

九 引入datatables外掛程式

在ace中,我們引入datatables外掛程式,這是一款展示 並通過js來實現個包括展示 分頁 排序等各種 功能的外掛程式,而且是高度可定製化的一款外掛程式。官方 為 當然,在我們的ace模板中也有包含,並加入了ace的css元素。1.修改index.html頁面,在其中增加block元素,用於存...

Spring 學習 (一)引入

spring 介紹 spring是什麼?spring是乙個解決了許多在j2ee開發中常見的問題的強大框架。為什麼要用spring?spring能幹嘛?在實際web開發中,首先基於mvc這種設計思想進行開發,其次還要按照其功能將程式分為三種 資料的展示,業務邏輯的處理,資料訪問 個人覺得這樣分主要是為...

2 8 引入本地擴充套件

源 1 源 為qdate類新增乙個函式nextday 2qdate nextday qdate date 3 引入本地擴充套件 子類 或 包裝類 1 子類 2class mydatesub public qdate37 8qdate nextday 912 13 14 包裝類15 class myd...