物流系統要新增包裹資料,現在物流的上游有三種包裹:線上的包裹,線下的包裹,外部的包裹,每種包裹在新增時會有些不同的操作,比如線上線下的包裹新增後要發訊息給訂單履約中心方便監控,線上包裹新增時要判斷包裹是否需要抽檢,釘箱,並生成相關的資料等。
每種包裹都有其特殊的操作,從系統維護的角度上說,可以使用策略模式來新增包裹,方便後期的維護,如果後期線上包裹需要多一些操作,那只改線上包裹的新增策略即可,測試也只用回歸線上包裹。
當然對於三種包裹公共的部分,需要放到乙個公共類裡,統一維護。
**結構:
1.寫乙個策略模版的接囗:packagesyncstrategy
/**
* 包裹同步策略
*/public
inte***ce
packagesyncstrategy
transportpackagedto是乙個包裹類,
resultdto是乙個結果的封裝類,可替換成自己公司的結果類,或者替換成string,boolean都可以。
針對策略型別還可以再封裝乙個接囗:basestrategy,使其更通用(別的地方可能也會用到策略模式),例如
public
inte***ce
basestrategy
<
t>
然後改寫上面的策略模版packagesyncstrategy:
/**
* 包裹同步策略
*/public
inte***ce
packagesyncstrategy
extends
basestrategy
是不是更簡潔了
其中列舉:ordertypeenum(根據自己的業務來建立時映列舉,我們的包裹是從訂單維度來區分的,而且只分了三種)
public
enum ordertypeenum
}
2.開始寫各種包裹的新增策略(具體邏輯省略,打了一句日誌代替了):
a.線上包裹新增策略:
/**
* 線上包裹同步策略
*/@slf4j
@service
public
class
onlinepackagesyncstrategy
implements
packagesyncstrategy
@override
public resultdto syncpackageinfo
(transportpackagedto packagedto)
}
b.線下包裹新增策略:
/**
* 線下包裹同步策略
*/@slf4j
@service
public
class
offlinepackagesyncstrategy
implements
packagesyncstrategy
@override
public resultdto syncpackageinfo
(transportpackagedto packagedto)
}
c.外部包裹新增策略:
/**
* 外部包裹包裹同步策略
*/@slf4j
@service
public
class
outerpackagesyncstrategy
implements
packagesyncstrategy
@override
public resultdto syncpackageinfo
(transportpackagedto packagedto)
}
3.最後編寫測試類:
public
class
packagecreatetest
extends
basetest
optional optional = packagesyncstrategies.
stream()
.filter
(o -
> o.
getstrategy()
.equals
(packagedto.
getordertype()
)).findfirst()
;if(!optional.
ispresent()
)的包裹資料同步策略"
, packagedto.
getordertype()
.gettype()
);return;}
resultdto resultdto = optional.
get().
syncpackageinfo
(packagedto)
; log.
info
("新增包裹的結果:"
+resultdto);}
}
這裡看不懂的多看看就明白了
4.執行結果:
線下包裹新增資料開始
新增包裹的結果:resultdto
(model=
null
, success=
true
, errorcode=
0, errormsg=
null
)
策略模式在工作中的應用
最近在日常工作過程中接到乙個任務 需要提供乙個介面,根據不同的意圖返回給客服端不同的答案,每個意圖去識別答案的演算法都有各自不同的邏輯。作為乙個合格的crud程式設計師,接到這個需求腦袋裡的第一反應就是用if else去實現,但是這樣寫 太醜陋了,每個else裡面都會有大量的業務邏輯,對於後期接坑的...
責任鏈模式在工作中應用
判斷配件是否需要抽檢,現在系統有三種抽檢規則 商品規則,組織規則,其它規則,配件滿足任一規則即需要抽檢 因為配件要依次經過三種規則,所以考慮使用責任鏈模式 讓配件依次匹配商品規則,組織規則,其它規則,滿足任一規則即返回,不滿足繼續用下一規則判斷。結構 1.策略模版,建立乙個抽象類 commonins...
設計模式在工作中的應用(二)
這裡我們不介紹如何進行解析生成sql語句,怎麼解析的不重要,只要知道這些都是解析類,轉換為sql語句的不同部分。我是想說說針對上面的需求,我是如何考慮的。需要能夠使用sqlserver的函式?大概想一想,感覺很容易啊,不就是封裝乙個函式類,實現sqlserver資料庫的函式。是的,最根本的實現也就是...