對於「設計模式」這個詞大家肯定都不陌生,很多框架也用到了設計模式,但是大部分的開發者應該是沒有深入的了解過,我準備硬肝下這23設計模式作為專題文章的開端,一共23種設計模式,我盡量在<23天肝完。
為什麼要學習設計模式:
在我大學四年,對設計模式也沒有什麼概念,寫**就想著能實現就可以了,不會有設計模式那樣的思想,但是當學習到了框架的時候,對於設計模式才有了一些更深入的了解,使用設計模式的**在擴充套件性上會比暴力的**更容易維護,特別是當乙個程式猿離職了後,你去接手它的**,裡面是一大堆if else,這樣真的會崩潰,修改都不知道從何下手
23種設計模式之工廠模式
23種設計模式之抽象工廠模式
23種設計模式之建造者模式
23種設計模式之原型模式
23種設計模式之單例模式
23種設計模式之介面卡模式
23種設計模式之橋梁模式
23種設計模式之**模式
23種設計模式之外觀模式
23種設計模式之裝飾器模式
23種設計模式之享元模式
23種設計模式之組合模式
23種設計模式之責任鏈模式
23種設計模式之命令模式
23種設計模式之迭代器模式
23種設計模式之中介者模式
23種設計模式之備忘錄模式
到目前為止、23種設計模式的建立型模式已經給大家肝完了,現在我們進入到乙個全新的章節,結構型模式!!!
對於手機和電源來說,充電器就是乙個介面卡,充電器將220v的額定電壓轉換為我手機所需要充電的電壓,要不然用220v來對手機進行充電,我相信目前為止的手機都接受不了這麼大的電壓,還有一些耳機轉接頭、螢幕轉接頭也是一類介面卡,那對於我們**來說什麼樣的才叫介面卡呢?我舉個例子a、b兩個系統傳輸資料可能在a系統的使用者id欄位為userid
,但是b系統的使用者id欄位為uid
,這樣就出現分歧了,b系統得將userid
轉換為uid
才可以儲存吧,這裡就相當於用到我們介面卡模式的開發原理了,隨著系統越來越大,子系統越來越多,各個子系統的資訊傳遞就成了很大的乙個問題,而且子系統有些又是外包出去的專案,這就導致了乙個問題,資料庫設計的字段設計大部分是不一樣的,這就需要從其他系統接收資訊的時候需要我們這邊自己處理一下才能存庫或者進行下一步的操作
到目前為止、對於實際專案我接觸過的有利用介面卡模式進行開發的系統就有乙個,我用乙個圖來給大家說明
通過我們上面的圖可以看出,介面卡前置也可以作為乙個小系統,也可以處理業務邏輯,但是最主要的是監聽訊息以及訊息轉換,轉換成我們子系統所需要的訊息格式,所以對於多個子系統的互相通訊,介面卡還是很有需要的
現在我們用乙個比較簡單的**來模擬實際專案用到介面卡模式的事件
舉個栗子,像平常我們使用的tb、jd等購物軟體,當使用者下單的時候,會給你一定的積分吧、有時候還會送一些小禮品,因為現在幾乎所有的網際網路公司都是使用的微服務架構,各個子系統各自執行,互不影響,通過網路進行訊息的傳遞,有的時候需要訊息佇列來進行通訊,但是訊息佇列只負責訊息的傳送與持久化,不能幫你更改裡面的內容啊,所以我們需要在各自的子系統中維護其他子系統傳遞過來的訊息,現在我們模擬三個子系統之間的通訊,訂單系統、禮品系統和積分系統
訂單系統需要傳遞的訊息:
@data
@allargsconstructor
@noargsconstructor
public
class
ordertransferadapter
這就出現了乙個問題,我禮品系統的使用者id不叫userid
,而是uid
,orderid
叫oid
,所以我們需要乙個介面卡來轉換訂單系統傳過來的字段,變成我們所需要的格式
定義乙個介面卡抽象類:
@data
public
abstract
class
abstracttransferadapter
禮品類來繼承抽象類,實現介面卡模式:
public
class
gifttransferadapter
extends
abstracttransferadapter
@data
@builder
static
class
targetobject
}
從上面的**我們可以看出,根據訂單系統傳過來的json格式字串,我們通過定義乙個靜態內部類,內部類的字段就是我們禮品系統所需要的欄位名稱,transfer()返回的就是禮品系統所需要的物件
積分系統也是一樣的道理,直接上**:
public
class
integraltransferadapter
extends
abstracttransferadapter
@data
@builder
static
class
targetobject
}
積分系統的使用者id在這稱作consumerid
,原理和禮品系統一樣
最後我們寫乙個測試類來測試我們的**是否正確
public
class
testadapter
}
輸出結果:
訂單系統傳輸的資料
禮品系統通過介面卡轉換得到的資料:
uid: aliangx
oid: c418a764-
3947-4d
12-a799-d24cb3450fad
useraddress: 中國山東濟南
createdate: fri mar 1916:
20:40 cst 2021
積分系統通過介面卡轉換得到的資料:
consumerid: aliangx
oid: c418a764-
3947-4d
12-a799-d24cb3450fad
consume:
2021.314000000000078216544352471828460693359375
createdate: fri mar 1916:
20:40 cst 2021
子系統得到資料之後就可以進行自己的業務處理了,這裡只是簡單的模擬了一下介面卡模式的應用,通過介面卡模式,我們再也不用為資料庫字段設計不同而苦惱,隨著系統的不斷深入,擁有堅實的基礎還是非常重要的!!!
完成:to: 2021/3/19 16:55
23種設計模式之介面卡模式
二 實現方式 三 總結 下文如有錯漏之處,敬請指正 介面卡模式是將乙個類介面轉換為客戶端期望的另乙個介面,使得原本因介面不相容的類能協同工作。即讓不相關的兩個類產生關聯並進行工作。介面卡模式的主要角色 缺點 物件介面卡模式 adapter類聚合adaptee物件並實現target介面 優點 缺點 預...
23種設計模式 介面卡模式
1 概念 定義 介面卡模式,是指將乙個類的介面轉換成客戶期望的另外乙個介面,是原本的介面不相容的類,可以一起工作。它是結構型模式的一種。建立型模式 結構型模式 行為模式 單例模式 模式 模板方法模式 原型模式 介面卡模式 策略模式 工廠方法模式 橋接模式 命令模式 抽象工廠模式 裝飾模式 責任鏈模式...
硬肝系列 23種設計模式之抽象工廠模式
對於 設計模式 這個詞大家肯定都不陌生,很多框架也用到了設計模式,但是大部分的開發者應該是沒有深入的了解過,我準備硬肝下這23設計模式作為專題文章的開端,一共23種設計模式,我盡量在 23天肝完。為什麼要學習設計模式 在我大學四年,對設計模式也沒有什麼概念,寫 就想著能實現就可以了,不會有設計模式那...