日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《研磨设计模式》chap18 状态模式state(2)模式介绍

發布時間:2025/3/21 asp.net 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《研磨设计模式》chap18 状态模式state(2)模式介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 狀態的平行性

與策略模式的不同,策略模式的行為是平等的

2. 上下文和狀態處理對象

上下文是持有狀態的對象,但是上下文自身并不處理跟狀態相關的行為,而是把處理狀態的功能委托給了狀態對應的狀態處理類來處理。

在具體的狀態處理類中經常需要獲取上下文自身的數據,甚至在必要的時候會回調上下文的方法,因此,通常將上下文自身當作一個參數傳遞給具體的狀態處理類。

客戶端一般只和上下文交互。客戶端可以用狀態對象來配置一個上下文,一旦配置完畢,就不再需要和狀態對象打交道了。客戶端通常不負責運行期間狀態的維護,也不負責決定后續到底使用哪一個具體的狀態處理對象。

3. 狀態的維護和轉換控制

VoteManager類保存數據,讓狀態自己維護管理。

public class VoteManager {// 記錄當前每個用戶對應的狀態處理對象,每個用戶當前的狀態是不同的private Map<String,VoteState> mapState = new HashMap<String,VoteState>();//記錄用戶投票的結果,Map<String,String>對應Map<用戶名稱,投票的選項>private Map<String,String> mapVote = new HashMap<String,String>();//記錄用戶投票次數,Map<String,Integer>對應Map<用戶名稱,投票的次數>private Map<String,Integer> mapVoteCount = new HashMap<String,Integer>();// 獲取記錄用戶投票結果的Map public Map<String, String> getMapVote() {return mapVote;}//獲取記錄每個用戶對應的狀態處理對象的Map public Map<String, VoteState> getMapState() {return mapState;}//獲取記錄每個用戶對應的投票次數的Map public Map<String, Integer> getMapVoteCount() {return mapVoteCount;} }public class RepeatVoteState implements VoteState{public void vote(String user, String voteItem, VoteManager voteManager) {//重復投票//暫時不做處理System.out.println("請不要重復投票");//重復投票完成,維護下一個狀態,重復投票到5次,就算惡意投票了//注意這里是判斷大于等于4,因為這里設置的是下一個狀態//下一個操作次數就是5了,就應該算是惡意投票了if(voteManager.getMapVoteCount().get(user) >= 4){voteManager.getMapState().put(user, new SpiteVoteState());}} }

4. 狀態存儲到數據庫中

不是存在Context上下文中,存在數據庫。

eg.

//直接從數據庫獲取該用戶對應的下一個狀態的狀態編碼 String stateid ="從數據庫中獲取這個值"; //開始根據狀態編碼來創建需用的狀態對象 //根據狀態編碼去獲取相應的類 string className ="根據狀態編碼去獲取相應的類";/使用反射創建對象實例,簡單示意一下 Class c = Class.forName (className) ;state = (VoteState)c.newInstance ();

總結

以上是生活随笔為你收集整理的《研磨设计模式》chap18 状态模式state(2)模式介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。