日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java設計模式之State

瀏覽:176日期:2024-06-27 11:00:29
內容: State的定義: 不同的狀態,不同的行為;或者說,每個狀態有著相應的行為.何時使用?State模式在實際使用中比較多,適合'狀態的切換'.因為我們經常會使用If elseif else 進行狀態切換, 如果針對狀態的這樣判斷切換反復出現,我們就要聯想到是否可以采取State模式了.不只是根據狀態,也有根據屬性.如果某個對象的屬性不同,對象的行為就不一樣,這點在數據庫系統中出現頻率比較高,我們經常會在一個數據表的尾部,加上property屬性含義的字段,用以標識記錄中一些特殊性質的記錄,這種屬性的改變(切換)又是隨時可能發生的,就有可能要使用State.是否使用?在實際使用,類似開關一樣的狀態切換是很多的,但有時并不是那么明顯,取決于你的經驗和對系統的理解深度.這里要闡述的是'開關切換狀態' 和' 一般的狀態判斷'是有一些區別的, ' 一般的狀態判斷'也是有 if..elseif結構,例如:if (which==1) state='hello';else if (which==2) state='hi';else if (which==3) state='bye';這是一個 ' 一般的狀態判斷',state值的不同是根據which變量來決定的,which和state沒有關系.如果改成:if (state.euqals('bye')) state='hello';else if (state.euqals('hello')) state='hi';else if (state.euqals('hi')) state='bye';這就是 '開關切換狀態',是將state的狀態從'hello'切換到'hi',再切換到''bye';在切換到'hello',好象一個旋轉開關,這種狀態改變就可以使用State模式了.如果單純有上面一種將'hello''hi''bye''hello'這一個方向切換,也不一定需要使用State模式,因為State模式會建立很多子類,復雜化,但是如果又發生另外一個行為:將上面的切換方向反過來切換,或者需要任意切換,就需要State了.請看下例:public class Context{private Color state=null;public void push(){//如果當前red狀態 就切換到blueif (state==Color.red) state=Color.blue;//如果當前blue狀態 就切換到greenelse if (state==Color.blue) state=Color.green;//如果當前black狀態 就切換到redelse if (state==Color.black) state=Color.red;//如果當前green狀態 就切換到blackelse if (state==Color.green) state=Color.black;Sample sample=new Sample(state);sample.operate();}public void pull(){//與push狀態切換正好相反if (state==Color.green) state=Color.blue;else if (state==Color.black) state=Color.green;else if (state==Color.blue) state=Color.red;else if (state==Color.red) state=Color.black;Sample2 sample2=new Sample2(state);sample2.operate(); }} 在上例中,我們有兩個動作push推和pull拉,這兩個開關動作,改變了Context顏色,至此,我們就需要使用State模式優化它.另外注意:但就上例,state的變化,只是簡單的顏色賦值,這個具體行為是很簡單的,State適合巨大的具體行為,因此在,就本例,實際使用中也不一定非要使用State模式,這會增加子類的數目,簡單的變復雜.例如: 銀行帳戶, 經常會在Open 狀態和Close狀態間轉換.例如: 經典的TcpConnection, Tcp的狀態有創建 偵聽 關閉三個,并且反復轉換,其創建 偵聽 關閉的具體行為不是簡單一兩句就能完成的,適合使用State例如:信箱POP帳號, 會有四種狀態, start HaveUsername Authorized quit,每個狀態對應的行為應該是比較大的.適合使用State例如:在工具箱挑選不同工具,可以看成在不同工具中切換,適合使用State.如 具體繪圖程序,用戶可以選擇不同工具繪制方框 直線 曲線,這種狀態切換可以使用State.如何使用State需要兩種類型實體參與:1.state manager 狀態管理器 ,就是開關 ,如上面例子的Context實際就是一個state manager, 在state manager中有對狀態的切換動作.2.用抽象類或接口實現的父類,,不同狀態就是繼承這個父類的不同子類.以上面的Context為例.我們要修改它,建立兩個類型的實體.第一步: 首先建立一個父類:public abstract class State{public abstract void handlepush(Context c);public abstract void handlepull(Context c);public abstract void getcolor();} 父類中的方法要對應state manager中的開關行為,在state manager中 本例就是Context中,有兩個開關動作push推和pull拉.那么在狀態父類中就要有具體處理這兩個動作:handlepush() handlepull(); 同時還需要一個獲取push或pull結果的方法getcolor()下面是具體子類的實現:public class BlueState extends State{public void handlepush(Context c){ //根據push方法'如果是blue狀態的切換到green' ; c.setState(new GreenState());}public void handlepull(Context c){ //根據pull方法'如果是blue狀態的切換到red' ;c.setState(new RedState());}public abstract void getcolor(){ return (Color.blue)}} 同樣 其他狀態的子類實現如blue一樣.第二步: 要重新改寫State manager 也就是本例的Context:public class Context{private Sate state=null; //我們將原來的 Color state 改成了新建的State state;//setState是用來改變state的狀態 使用setState實現狀態的切換pulic void setState(State state){this.state=state;}public void push(){//狀態的切換的細節部分,在本例中是顏色的變化,已經封裝在子類的handlepush中實現,這里無需關心state.handlepush(this);//因為sample要使用state中的一個切換結果,使用getColor()Sample sample=new Sample(state.getColor());sample.operate(); } public void pull(){state.handlepull(this);Sample2 sample2=new Sample2(state.getColor());sample2.operate(); }} 至此,我們也就實現了State的refactorying過程.以上只是相當簡單的一個實例,在實際應用中,handlepush或handelpull的處理是復雜的.參考資源:the State and StategyHow to implement state-dependent behavior The state patterns Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产成人免费| 国产v日韩v欧美v| 精品捆绑调教一区二区三区| 精品一区二区三区在线观看视频| 欧美精品福利| 日本va欧美va欧美va精品| 日韩在线成人| 日韩和欧美一区二区三区| 日韩美女精品| 欧美日本精品| 成人在线视频区| 日韩黄色大片网站| 欧美影院三区| 一区二区三区午夜视频| 日本vs亚洲vs韩国一区三区二区| 日本h片久久| 免费在线亚洲| 97精品国产福利一区二区三区| sm捆绑调教国产免费网站在线观看| 日本а中文在线天堂| 欧美成人基地| 伊人精品视频| 日韩av一级片| 精品国产鲁一鲁****| 欧美日韩尤物久久| 老牛国产精品一区的观看方式| 日韩精品免费一区二区夜夜嗨| 欧美黄页在线免费观看 | 亚洲一区二区三区中文字幕在线观看| 免费看的黄色欧美网站| 青青国产精品| 国产精品成人a在线观看| 99精品网站| 一区福利视频| 国产亚洲精品精品国产亚洲综合| 精品国产三区在线| 女生影院久久| 91久久午夜| 欧美日韩少妇| 国产精品伊人| 久久久久久美女精品| 日韩中文字幕麻豆| 国产经典一区| 欧美精品黄色| 你懂的国产精品| 日韩一区二区久久| 国产精品分类| 国产专区一区| 97成人在线| 日韩中文在线电影| 中文字幕日韩欧美精品高清在线| 国产中文欧美日韩在线| 亚洲欧美网站| 红杏一区二区三区| 久久亚洲风情| 韩国久久久久久| 亚洲欧美不卡| 精品色999| 免费成人在线影院| 成人免费一区| 亚洲一级大片| 国产69精品久久| 综合激情一区| 国产在线一区不卡| 免费观看久久久4p| 另类中文字幕国产精品| 中文字幕亚洲精品乱码| 中文一区一区三区高中清不卡免费| 在线观看亚洲精品福利片| 精品久久精品| 91亚洲精品在看在线观看高清| 亚洲调教视频在线观看| 奇米777国产一区国产二区| 国产精品97| 国产一区二区三区不卡av | 精品一区91| 亚洲精选成人| 久久国产亚洲精品| 久久免费精品| 日韩和欧美一区二区| 欧美日韩视频| 人人香蕉久久| 亚洲精品自拍| 亚洲激情五月| 精品日韩一区| 日本亚洲欧美天堂免费| 99视频精品全国免费| 国产精品mm| 亚洲精选久久| 亚洲黄页一区| 91亚洲国产| 国产精品一卡| 亚洲2区在线| 91久久黄色| 欧美日韩中文字幕一区二区三区| 久久影视三级福利片| 日本va欧美va欧美va精品| 99国产精品| 91精品国产乱码久久久久久久| 久久精品国产在热久久| 日韩福利视频一区| 男女男精品网站| 婷婷综合五月| 欧美日韩精品一区二区视频| 国产中文在线播放| 国产精品1区| 人人爱人人干婷婷丁香亚洲| 蜜臀91精品一区二区三区| 美女网站一区| 婷婷成人综合| 欧美综合另类| 伊人精品一区| 尤物tv在线精品| 欧美手机在线| 欧美手机在线| 激情偷拍久久| jiujiure精品视频播放| 亚洲婷婷在线| 欧美精品一区二区久久| 欧美/亚洲一区| 日韩中文影院| 99久久婷婷这里只有精品| 成人精品天堂一区二区三区| 日本美女一区| 亚洲午夜精品久久久久久app| 99久久精品网| 精品1区2区3区4区| 亚洲欧美日韩国产一区二区| 美女黄网久久| 亚洲男人在线| 日韩精品亚洲专区在线观看| 日韩不卡一区二区三区| 国产日韩一区| 麻豆精品视频在线| 国产精品毛片久久| 国产精品蜜芽在线观看| 精品捆绑调教一区二区三区| 青青久久av| 久久精品不卡| 久久国产成人| 亚洲精品少妇| 国产精品密蕾丝视频下载| 久久这里只有| 久久狠狠婷婷| 亚洲在线一区| 欧美一级网站| 精品三级国产| 99热国内精品| 蜜臀精品一区二区三区在线观看| 日本不卡高清| 国产精品久久久久久久久久妞妞| 麻豆久久一区| 久久男女视频| 性色一区二区| 欧美日韩亚洲一区| 97精品97| 亚洲一区不卡| 久久精品凹凸全集| 国产成人精选| 在线亚洲国产精品网站| 日本99精品| 伊人网在线播放| 老鸭窝毛片一区二区三区| 国产亚洲久久| 神马午夜久久| 中文字幕日韩欧美精品高清在线| 国产精区一区二区| 欧洲在线一区| 亚洲区国产区| 国产成人精品一区二区免费看京 | 黄色在线一区| 欧美日韩伊人| 99热精品久久| 青青国产91久久久久久| 亚洲黄色中文字幕| 亚洲视频www| 国产精品2区| 欧美精品一区二区三区精品| 伊人国产精品| 97国产成人高清在线观看| 久久成人精品| 日产精品一区二区| 亚洲一区欧美| 日韩大片在线观看| 日本v片在线高清不卡在线观看| 国产66精品| 亚洲影视一区二区三区| 98精品久久久久久久| 视频一区国产视频| 黄色网一区二区| 视频一区视频二区在线观看| 精品视频一区二区三区在线观看 | 欧美在线不卡| 久久精品国产www456c0m| 日韩国产一二三区| 亚洲一级特黄| 美女免费视频一区| 日韩中文字幕1| 日韩在线第七页| 国产欧美高清|