前幾天看到新來的同事桌上有一本設計模式的書,想起許多年前自己啃厚厚的模式時,始終昏昏欲睡,不得要領那段時光。重整思路,結合spring,寫下現在在開發中常用的設計模式使用方式。
在工作中最常用的就是策略模式了,也可以說是策略模式的簡化版。客戶端可以決定用那種策略,呼叫上下文,上下文使用具體策略做具體的處理。
策略模式的本質是,分離演算法,選擇實現。如果沒有中間的上下文,用介面抽象出策略的行為,客戶端呼叫即可。
以終為始,先上客戶端測試**,具體如下:
@test
void
should_get_select_paymethod_when_client_selected_some_pay_method()
那麼客戶端需要許多寫if else來支援麼?不必,使用策略模式,或者重構出介面,再使用spring bean的構造,通過map管理各個策略元件。客戶選擇哪種支付方式,從map中get出來就ok。
上下文中維護策略map,具體如下:
@service
public
class
paycontext);
}public string pay
(string paytype)
}
ipaystr是支付方式的介面,所有具體的支付方式都有pay()一種行為。
public
inte***ce
ipaystr
public string getdesc()
}}
上下文中map的key是什麼呢?就是客戶傳過來的報文中的列舉值(實際專案中可能有更多種組合方式)。在介面裡可使用defindetype(),規定各個實現類必須初始化乙個不重複的值即可。
@component
public
class
wxpaystrimpl
implements
ipaystr
@override
public paytype defindetype()
}
這樣,**中沒有顯示的if else,如果新增更多種支付方式,實現ipaystr,再新寫一種列舉值即可。 Spring 中使用了那些設計模式呢?
一 spring 中常見的設計模式 工廠模式 beanfactory 模式 aopproxy 委派模式 dispatcherservlet 介面卡模式 handlerapdapter 模板方法模式 jdbctemplate 觀察者模式 contextloaderlistener 二 spring 的...
Spring中使用Quartz 一
quartz使用 開發環境 spring2.0。如果包類沒有quartz包,則需要加入到類路徑。a extends quartzjobbean方法 建立乙個job packageonlyfun.bb.quartz importorg.quartz.jobexecutioncontext import...
在spring中使用工廠模式
bean的建立預設就是框架利用反射new出來的bean例項 工廠模式 工廠幫我們建立bean 有乙個專門幫我們建立物件的類,這個類就是工廠 假設有乙個飛機類airplane,那麼工廠模式中飛機的建立方法就是 airplane ap airplanefactory.getairplane string...