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

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

java設計模式之State

瀏覽:183日期: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久久,三上悠亚国产精品一区二区三区
精品视频网站| 99久久夜色精品国产亚洲狼| 亚洲激情二区| 亚洲欧美高清| 亚洲一区二区毛片| 国产精品婷婷| 国产精品最新| 成人精品国产亚洲| 不卡在线一区二区| 亚洲精品大全| 精品一区二区三区中文字幕在线| 日韩在线短视频| 丝袜亚洲精品中文字幕一区| 日韩和欧美一区二区| 久久97久久97精品免视看秋霞| 日韩在线看片| 综合在线一区| 国产资源在线观看入口av| 亚洲激情偷拍| 里番精品3d一二三区| 午夜av不卡| 亚洲人成网77777色在线播放 | 亚洲精品成人| 国产亚洲一区| 亚洲小说欧美另类婷婷| 日本精品在线播放| 日韩av片子| 久久国产88| 成人小电影网站| 日韩区一区二| 午夜亚洲精品| 日本精品在线中文字幕| 亚洲综合婷婷| 成人日韩在线| 老牛国内精品亚洲成av人片| 蜜桃久久av| 亚洲欧美一区在线| 日韩一区亚洲二区| 久久精品国产一区二区| 日本一区免费网站| 日韩在线卡一卡二| 米奇777超碰欧美日韩亚洲| 精品国内亚洲2022精品成人| 亚洲v天堂v手机在线| 欧美99久久| 99视频精品全国免费| 日韩成人免费| 精品国产一区二区三区2021| 亚洲在线免费| 一区在线观看| 午夜视频精品| 欧美国产91| 久久亚洲在线| 亚洲天堂成人| 在线视频亚洲| 久久电影一区| 免费久久99精品国产| 久久国产精品99国产| 男人的天堂亚洲一区| 日韩专区在线视频| 一区二区三区四区日韩| 亚洲一区二区免费在线观看| 奶水喷射视频一区| 中文在线一区| 免费看日韩精品| 欧美日韩xxxx| 成人在线免费观看91| 成人片免费看| 欧美日韩激情| 老鸭窝毛片一区二区三区| 美女精品在线| 日韩在线黄色| 牛牛精品成人免费视频| 亚洲精品福利电影| 欧美精品一线| 日韩黄色av| 精品一二三区| 亚洲激情中文在线| 午夜影院欧美| 91精品国产自产在线丝袜啪| 精品91福利视频| 91成人精品| 欧美精品99| 午夜精品一区二区三区国产| 蜜桃视频第一区免费观看| 国产伦精品一区二区三区视频| 中文在线免费视频| 亚洲一级淫片| 热三久草你在线| 蜜臀久久99精品久久久久宅男| 国产精品传媒麻豆hd| 五月天综合网站| 麻豆91在线播放| 欧美jjzz| 久久一区精品| 亚洲婷婷丁香| 久久国产电影| 国产精品jk白丝蜜臀av小说| 欧美日中文字幕| 国产精品视频一区视频二区| 国产在线成人| 国产剧情一区二区在线观看| 久久国产精品亚洲77777| 国产一区国产二区国产三区| 久久高清国产| 日本在线精品| 国产一区二区亚洲| 国产三级一区| 五月精品视频| 九色porny丨国产首页在线| 国产精品1区| 欧美日韩18| 婷婷精品久久久久久久久久不卡| 激情综合激情| 久久九九精品| 桃色一区二区| 成人羞羞视频播放网站| 国产suv精品一区二区四区视频| 国产精品欧美日韩一区| 欧美一区影院| 91精品国产经典在线观看| 亚洲精品精选| 91福利精品在线观看| 丝袜亚洲另类欧美| 日韩中文欧美在线| 中文字幕中文字幕精品| 亚洲一区二区三区无吗| 免费在线观看日韩欧美| 最新亚洲国产| 日本欧美一区二区| 你懂的国产精品| 亚洲永久av| 99热精品在线观看| 在线免费观看亚洲| 国产精品mm| 亚洲网站视频| 中文字幕av一区二区三区人 | 黑森林国产精品av| 日韩精品麻豆| 蜜桃av一区二区在线观看| 青草国产精品| 亚洲黄色免费av| 美女久久一区| 欧美aⅴ一区二区三区视频| 国产精品久久久久蜜臀| 午夜久久影院| 麻豆国产欧美日韩综合精品二区| 精品欠久久久中文字幕加勒比| 四虎影视精品| 日韩专区视频网站| 久久精品一区| 中文日韩欧美| 欧美日韩一区二区国产| 日韩一区三区| 欧美午夜三级| 狠狠操综合网| 精品国产亚洲一区二区在线观看| 午夜电影亚洲| 国产精品亲子伦av一区二区三区| 亚洲国产专区校园欧美| 国产精品对白| 中文字幕av一区二区三区四区| 国产96在线亚洲| 亚洲精品中文字幕99999| 日本少妇一区| 国产精品观看| 亚洲精品无吗| 国产精品原创| 国产极品久久久久久久久波多结野| 欧美日韩国产高清电影| 丰满少妇一区| 国产欧美一区二区三区精品观看 | 欧美精品中文字幕亚洲专区| 国产精品7m凸凹视频分类| 狠狠久久伊人中文字幕| 91麻豆精品激情在线观看最新| 亚洲欧美日韩国产综合精品二区| 97精品在线| 久久精品理论片| 亚洲精品免费观看| 蜜芽一区二区三区| 亚洲免费观看| 亚洲一区二区三区免费在线观看| 久久久一本精品| 欧美日一区二区| 国产真实久久| 五月精品视频| 亚洲综合精品四区| 蜜桃久久av| 日韩精品电影一区亚洲| 亚洲精品无播放器在线播放| 石原莉奈在线亚洲二区| 亚洲综合五月| 日本在线视频一区二区| 免费的成人av| 日本欧美一区二区| 国产一级成人av| 国产欧美日韩一级| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 在线亚洲精品|