開竅了!如何為緩存工具類(CacheUtil中的static方法)定義interface(下)
兩個不同策略的緩存工具類 在我們系統的基建包裏,有一個基於redis的get/set等基礎api封裝的 CacheUtil。 CacheUtil 主要有下面2個靜態方法: public class CacheUtil { /** * 獲取緩存。如果沒有,則設置 */ public static T T getCache(String key, long s
Nickname buguge
Contributes9
Followers0
兩個不同策略的緩存工具類 在我們系統的基建包裏,有一個基於redis的get/set等基礎api封裝的 CacheUtil。 CacheUtil 主要有下面2個靜態方法: public class CacheUtil { /** * 獲取緩存。如果沒有,則設置 */ public static T T getCache(String key, long s
Nickname buguge
本文介紹了在賬務插件開發中,如何通過“面向接口編程”實現異步轉賬完成後的回調通知機制。通過定義回調接口 TransferCallback,賬務組件在異步操作完成後可通知上層應用進行後續業務處理。文章提供了純 Java 和 Spring 兩種實現方式的代碼示例,展示了接口在插件化架構中的重要作用,體現了面向接口編程在解耦與擴展方面的優勢。 我們在開發一個賬務插件(sby-plug
Nickname buguge
兩個不同策略的緩存工具類 在我們系統的基建包裏,有一個基於redis的get/set等基礎api封裝的 CacheUtil。 CacheUtil 主要有下面2個靜態方法: public class CacheUtil { /** * 獲取緩存。如果沒有,則設置 */ public static T T getCache(String key, long s
Nickname buguge
本文介紹了在賬務插件開發中,如何通過“面向接口編程”實現異步轉賬完成後的回調通知機制。通過定義回調接口 TransferCallback,賬務組件在異步操作完成後可通知上層應用進行後續業務處理。文章提供了純 Java 和 Spring 兩種實現方式的代碼示例,展示了接口在插件化架構中的重要作用,體現了面向接口編程在解耦與擴展方面的優勢。 我們在開發一個賬務插件(sby-plug
Nickname buguge
瞭解UML的人都知道UML中也有包的概念,包在UML中作用與面向對象編程語言中類似,它是管理對象的工具,也是解決對象同名衝突的手段。 在UML中,包的表示圖形是一個左上角帶標籤的矩形,而包名可以標註於矩形中央(如下圖所示,包名Package1位於矩形中央)或者左上角的標籤之內。 將包名置於包圖形中央時,通常會影響包中所包含內容的描畫,因而在需要體現包中的內容時,通常將包名置於左
Nickname 光頭顏
包是UML中管理元素的有效手段,UML中的所有元素均隸屬於某一個包,即使你沒有指定元素所屬的包,這些元素也會被置於一個默認包中,包的本質是命名空間。當我們在一個包中需要訪問另一個包中的元素時,可以使用符號“::”逐級引用。 例如在下圖所示的包圖中,存在兩支包含多個層次的包,如果包A3中的元素需要訪問包B3中的元素C,則可以使用B1::B2::B3::C的形式達到目的。 不同包中
Nickname 光頭顏
泛型的定義 泛型類的定義 下面定義了一個泛型類 Pair,它有一個泛型參數 T。 public class PairT { private T start; private T end; } 實際使用的時候就可以給這個 T 指定任何實際的類型,比如下面所示,就指定了實際類型為 LocalDate,泛型給了我們一個錯覺就是通過個這個模板類 PairT,我們可以在實際使用的時候動態的派生出各種實
Nickname 用户bPbhIAe
包是UML模型的組織結構,也是UML項目的配置管理結構。包存在多個層級,除了頂層包,所有包隸屬於一個且僅隸屬於一個上層包。在項目不同階段實際推進與配置過程中,通常以不同層級的包為單位進行check-in、check-out、打標籤及建立基準。許多項目會在計劃的時間點進行正式的官方評審,例如系統需求評審(SRR)、系統設計評審(SDR)、初步設計評審(PDR)、關鍵設計評審(CDR)或測試準備評審(
Nickname 光頭顏
在UML中,多重性是指一個條目潛在的數量範圍。多重性可被用於屬性、操作參數、關聯關係。UML元模型也使用多重性對元模型元素之間的關係進行約束。多重性總是包含基數值,它是相關條目在現實世界中的確切數量。本文將説明類屬性和類操作參數的多重性。 一、屬性的多重性 假設我們需要定義一個表示書的Book類,它包含有一系列的屬性。我們只選取其中的書名(title)、作者(author)、頁數(pa
Nickname 光頭顏
無論何時當我們要使用一個多值對象時,我們必須要清楚兩個問題,一是這些值的順序重要嗎?二是允許重複值的存在嗎?在編程語言中還會有其他的明確的信息,在UML中,只需明確這兩個問題的答案即可確定對應的集合類型。 1.Set Set是一個不允許存在重複值且未排序的集合。 例如一個騎行活動中,有許多騎手參加。每個騎手在一個騎行活動中只可能出現一次,即任一個特定的騎手在騎行活動中不可能重複出現;每個參與
Nickname 光頭顏
關聯指兩個類之間的各種聯繫。UML使用各種單實線表示關聯,這個單實線可以是直線(垂直的、水平的或者傾斜的)、折線甚至曲線。 事實上,關聯也是展示類的屬性的另一外的一種形式。例如在下圖中,我們通過一條實線連接類Book和類Person,表示它們之間存在關聯。在關聯的末端,標出多重性[*]和關聯端名稱(通常稱為“角色名稱”)author。 從上圖中我們可以看到關聯端名稱(角色名稱)
Nickname 光頭顏
關聯和鏈接關係在很多情況下是對稱的,即被關聯的兩個類都有以自己為源端對方為目標端的角色存在,而且角色與源端類的屬性是等價的,即在關聯一端的關聯端(角色)等價於另外一端的屬性。例如,在下圖中,我們可以認為author:Person是類Book的一個屬性,而myBooks:Person是類Person的一個屬性。 關於關聯的詳細信息,可參閲《UML之關聯》一文。 如果希望表達一種非
Nickname 光頭顏
在UML(統一建模語言)中,泛化(Generalization)和特化(Specialization)是面向對象思想中繼承(Inheritance)關係的重要概念,它們描述類與類(或用例與用例、參與者與參與者等)之間的一般與特殊的關係。 泛化是一種表示類之間繼承關係的方式,它指定了子類如何特化超類(父類)的所有特徵和行為。在UML中,泛化關係通過帶空心三角箭頭的實線表示,箭頭指向超類。這種關
Nickname 光頭顏
用例是最簡單的UML元素,用例圖是最簡單的UML圖,但它也可能是UML中最有用的元素之一。儘管我們用包將工作分解為工作包、團隊任務或單項任務,也就是説包是組織UML中的各種圖及元素的工具。但是用例圖可以幫助我們確定任務,以及應當如何將它們分組並確定工作範圍。 每個用例都代表用户希望系統幫助實現的一個目的或目標。例如,對於銀行ATM機,客户希望使用它來取款、存款、轉賬或者修改密碼等,而銀行則希
Nickname 光頭顏
概念 Servlet是運行在服務端的小程序(Server Applet),可以處理客户端的請求並返回響應,主要用於構建動態的Web應用,是SpringMVC的基礎。 生命週期 加載和初始化 懶加載(默認在客户端第一次請求加載到容器中),通過反射實例化,並調用init(),且init()只能被調用一次,因此每個Servlet是單例的,需注意線程安全。 請求處理 Servlet 容器
Nickname SlackClimb
之前寫過兩篇關於軟件工程中對象命名的文章:開發中對象命名的一點思考與對象命名怎麼上手?從現實世界,但感覺還是沒有説透, 在軟件工程中,如果問我什麼最重要,我的答案是對象命名。良好的命名能夠反映系統的本質,使代碼更具可讀性和可維護性。本文通過具體例子,探討為何應該以對象本質而非功能來命名,以及不當命名可能帶來的長期問題。 一個例子 這個例子是我最近看到的一段代碼,用於解釋SOLID中的依賴
Nickname CareySon
最近在做一些代碼重構,涉及到Python中部分代碼重構後,單元測試實現較為麻煩甚至難以實現的場景,其中一個主要的原因是構造函數過於複雜。 因此,本篇文章藉此總結一下我們應該需要什麼樣的構造函數。本篇文章涉及的概念不僅限於Python。 構造函數是什麼 構造函數用於創建對象時觸發,如果不自定義構造函數,通常現代的編程語言在編譯時會自動加一個無參的構造函數,同時將類成員設置成默認值,
Nickname CareySon
觀察者模式(Observer Pattern)是一種行為型設計模式,通過定義對象間一對多的依賴關係實現狀態變化的自動通知機制,廣泛應用於解耦事件發佈與訂閲場景 適用於 ①當一個抽象模型有兩個方面,其中一個方面依賴於另一個方面。將這兩者封裝在獨立地對象中以使它們可以各自獨立地改變和複用。 ②當對一個對象的改變需要同時改變其他對象,而不知道具體有多少對象有待改變時。 ③當一個對象必須通知其他對象,而它
Nickname 是銘不是明
NCHU OOP BLOG1--電梯調度程序 目錄 1.前言 2.設計與分析 3.踩坑心得 4.改進建議 5.總結 正文 1.前言 這三次大作業主要圍繞的對電梯的調度來展開,調度算法為LOOK算法,實際上,比現實中的一些電梯所用算法更簡單。 其中,第一次作業難度最大,後面兩次作業進行迭代並不難; 考點主要是類和對象,以及類與類之間的關係,還包括jav
Nickname 等時圓~
兩個不同策略的緩存工具類 在我們系統的基建包裏,有一個基於redis的get/set等基礎api封裝的 CacheUtil。 CacheUtil 主要有下面2個靜態方法: public class CacheUtil { /** * 獲取緩存。如果沒有,則設置 */ public static T T getCache(String key, long s
Nickname buguge
一、前言 對這兩次題目集的總結: 這兩次題目集相較於上次迭代作業來説,在題目量和難度上都做了下調。但要求我們在理解題目意思、設計好程序結構、掌握並運用知識這三方面有一定的要求。涉及到類的繼承與多態,抽象類的設計和抽象方法的靈活運用。以及面向對象的幾種程序設計的原則(單一職責原則、里氏代換原則、開閉原則、合成複用原則)。鍛鍊我們面向接口編程的能力。需要我們不斷規範自己的類設計、優化代碼結構、降
Nickname Sereln
一、前言 對整門課程的概要性總結,從工作量與難度兩大角度展開分析,總體説明學習體驗。 (一)工作量評估 學習任務 工作量星級 詳細説明 Blog 作業 ⭐⭐⭐ 工作量在可接受範圍。Blog作業主要是在每次的PTA迭代作業完成後,要求我們對這次迭代作業或者是對於課程的學習,完成一個總結型的文章,然後時間要求在一週時間內完成。考慮到需
Nickname Sereln
本文介紹了在賬務插件開發中,如何通過“面向接口編程”實現異步轉賬完成後的回調通知機制。通過定義回調接口 TransferCallback,賬務組件在異步操作完成後可通知上層應用進行後續業務處理。文章提供了純 Java 和 Spring 兩種實現方式的代碼示例,展示了接口在插件化架構中的重要作用,體現了面向接口編程在解耦與擴展方面的優勢。 我們在開發一個賬務插件(sby-plug
Nickname buguge