在設計賬戶系統的過程中遇到這樣乙個問題,就是當第三方賬戶需要根據第三方賬戶的型別來當前的使用者id和第三方的unionid進行乙個繫結操作。
如果一般的做法呢就是寫很多的if else通過判斷不同的賬戶型別,來決定進行哪種第三方繫結的操作。
下面是使用策略模式的做法,下面**演示,只需關注策略模式的流程和實現,語法上不必深究
首先定義乙個 策略介面
package com.third;
public inte***ce thirdinfointe***cestrategy
package com.third;
public class wechatuserinfostrategy implements thirdinfointe***cestrategy
}
可能有蘋果的方式
package com.third;
@override
public void updateuserinfo(string unionid, tbluserinfo userinfo)
}
可能有**的方式
package com.third;
public class taobaouserinfostrategy implements thirdinfointe***cestrategy
}
最後定義乙個上下文類,統一執行所有策略繫結操作
context類意義,使得策略的行為對外操作起來更為統一,注意策略模式是乙個行為行的設計模式,
關注點在執行行為的那個方法,而不用關心,具體的策略方法,
當然了我覺得如果策略的行為特別簡單,在決定要使用哪種策略的時候也可以直接用。
package com.third;
public class thirdinfobindcontext
// public void bind(string unionid,tbluserinfo userinfo)
}
// 簡單呼叫,版本一
public class client
}
// 通過反射獲取具體策略物件,版本二
public class client
}
// 配置檔案+反射呼叫,版本三
public class client
}
配置
key[0] = weixin
value[0] = com.third.wechatuserinfostrategy
.....
在版本三中實現了全流程**不改動,完全適應業務,當新的第三方登入方式增加時,只需要增加**的具體策略,和配置檔案中的型別和策略名稱即可。
這種做法可能在現如今這個jar包部署整個服務時候體現不出優勢,因為我們不能向正在執行的jar包中新增其他的.class檔案。
但在我接觸的c# 專案中,這種反射+配置的做法,好處卻時十分的明顯,當新加乙個功能時往往只需要在專案目錄中加乙個寫好的.dll檔案,
再將當前專案中的配置檔案新增相關配置,即可完成功能的新增,使用起來十分的方便。
策略模式簡單實現
設計模式目錄 狀態,職責鏈,策略對比分析 幾種模式的對比分析 幾種模式的對比分析 策略模式 就是有乙個策略類,他有乙個演算法函式 algorithminte ce 可多型。他可供context選擇 context呼叫他的演算法函式 algorithminte ce c include using n...
策略模式和簡單工廠模式
策略模式和簡單工廠模式有什麼不同額?最近在學習設計模式,遇到這兩種模式,有點兒迷糊?簡單工廠模式 public class operation return result private double numbera 0 public double numbera set private doubl...
簡單工廠模式和策略模式
兩種模式如出一轍,基本方式都是通過將相同的行為封裝在乙個抽象父類 或介面 中,然後子類繼承該抽象父類並對該相同的行為進行不同的實現。簡單工廠模式 目的在於根據不同的條件建立不同的子類,工廠類的作用就是建立類。策略模式 比簡單工廠模式多了乙個context類,該類中保持對乙個策略父類的引用。該模式對策...