converter設計模式擴充套件,多種輸入輸出與標準輸入輸出的轉化方案

孫悟空空發表於2019-03-21

converter設計模式擴充套件,多種輸入輸出與標準輸入輸出的轉化方案

需求背景

一般情況下B端應用系統會對接多個使用者,不同使用者在入參出參格式、應用系統處理方式、出參返回時機,甚至非同步出參等方面不盡相同。針對應用系統的標準入參出參和多使用者入參出參的差異,需要一箇中介軟體來實現入參出參的轉化。converter設計模式是實現這種轉換的框架模型,然而在具體的應用系統下需要基於converter模式做出擴充套件已適應具體的需求。

下圖是一種基本的B端系統請求模式

系統請求模式

其中的A型別的出參和B型別的出參包含兩層含義:同步出參和非同步出參。橙色部分的引數轉換器是本文討論的主題

converter設計模式

簡單複習一下converter設計模式,詳細講解文章(帶原始碼)
在這裡插入圖片描述
上圖是簡化版的converter模式型別。Converter是介面,其中使用了java8的語法Function<U, T>, 具體的轉換細節程式碼由開發者自己實現Function<U, T> 完成。PersonConverter是介面的實現,實現從PersonDto到Person的轉換功能。
抽象來看,converter模式就是這麼簡單。

擴充套件converter設計模式

在converter模式的基礎上要實現多使用者的入參,出參,甚至非同步出參的需求,要對模式做一定的調整。

在這裡插入圖片描述

上圖是針對“背景需求”中多使用者請求模式的解決方案的類圖。先不要頭皮發麻,逐一講解一下。
注意類圖中的有很多介面和虛擬類,其目的都是為了抽象,為多使用者,甚至多流程開發提供的抽象

  1. InputHandler 和 OutHandler
    這兩個是介面類,與converter模式中的Function<U, T>的作用是一樣的。由使用者自己實現轉換的細節。
  2. InputDuplexConverter
    從名稱上解釋:輸入全雙工轉換器。職責是入參處理和同步出出參處理。這是個抽象類,成員變數中有inputHandler和OutHandler
  3. AInputDuplexConverter
    繼承InputDuplexConverter的抽象類,什麼還是抽象類呢?可以理解為,把A使用者的一些公共功能寫到這個型別。
  4. ARInputDuplexConverter
    繼承AInputDuplexConverter類, 是具體實現,其中的兩個變數是: AInputHandler和AOutHandler類,也就是處理A的輸入和同步輸出

整個入參處理和同步出參已經介紹完畢,總體來說是converter模式的擴充套件,通過虛擬類把公共部分抽象出來。
同樣非同步出參的處理是上半部分。包括:ANoticeInputHandler , ANoticeOutHandler, OutDuplexConverter, AOutputDuplexConverter 。結構型別,大家類比看吧

總結

設計模式, 資料結構, 演算法等都是對程式設計師很基礎又重要的知識。在實際問題及解決過程中,都是在此基礎上,針對實際問題提出解決方案。針對應用系統的標準入參出參和多使用者入參出參的差異,而提出的多種輸入輸出與標準輸入輸出的轉化方案,是基於converter模式擴充套件來的。
希望對大家有幫助,如需進一步交流,可以留言或留下聯絡方式,一起多探討進步。

相關文章