國外推廣網(wǎng)站國內營銷推廣渠道
場景
假設做了個賣課網(wǎng)站,會員等級分為月vip、年vip、終生vip,每個等級買課的優(yōu)惠力度不一樣,傳統(tǒng)的寫法肯定是一堆的 if-else,現(xiàn)在使用策略模式寫出代碼實現(xiàn)
代碼實現(xiàn)
策略模式的核心思想就是對擴展開放,對修改關閉。
所以需要定義一個接口,便于使用多態(tài)
如下是年vip代碼實現(xiàn)
如下是月vip代碼實現(xiàn)
如下是終生vip代碼實現(xiàn)
最后,在業(yè)務層注入bean對象,并進行方法調用,可以看到,這里沒有使用@Autowired來進行bean的注入,而是定義了一個 List
構造方法,當Spring IoC實例化這個bean的時候會看構造方法是有參的還是無參的,如果有參數(shù),會把參數(shù)一并初始化,如果這個參數(shù)是list,會把List集合泛型相關的所有接口子類找出來實例化
這樣就是利用了策略模式改造,如果后續(xù)還有其它的什么vip,只需要再重新定義一個接口的實現(xiàn)類即可,CourseRelationService這里面的邏輯無需修改,達到了對擴展開放,對修改關閉的目的。