成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

java設計模式之State

瀏覽:138日期: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
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
99久久99久久精品国产片果冻| 亚洲一区黄色| 亚洲另类自拍| 中文字幕欧美区| 成人黄色在线看| 欧美一级午夜免费电影| 捆绑调教一区二区三区| 欧美一级视频| 亚洲人精品午夜| 欧美激情无毛| 精品精品国产高清a毛片牛牛| 精品一区二区三区视频在线观看| 国产精品一区亚洲| 亚洲三级免费观看| 在线日本成人| 亚洲三级久久久| 精品91久久久久| 国产精品视频九色porn| 欧美淫片网站| 欧美激情在线一区二区| 91在线免费看| 国产欧美日韩综合精品一区二区 | 欧美一二三四区在线| 美女视频黄久久| 在线观看一区日韩| 久久国产剧场电影| 欧美日韩国产综合一区二区| 精品一区二区在线视频| 欧美日韩国产综合久久| 国产在线一区观看| 欧美日韩夫妻久久| 国产精品亚洲一区二区三区妖精| 这里是久久伊人| 国产一区二区0| 精品国产乱码久久久久久免费| 成人免费黄色大片| 日韩精品一区二| 99久久99久久精品免费观看| 久久婷婷成人综合色| 91蜜桃免费观看视频| 日本一区二区成人| 国模精品一区二区三区| 一区精品在线播放| 99xxxx成人网| 三级影片在线观看欧美日韩一区二区| 欧美三级三级三级爽爽爽| 狠狠色综合日日| 欧美一级黄色片| 欧美一区高清| 亚洲欧洲综合另类在线 | 制服丝袜国产精品| 成人做爰69片免费看网站| 久久久久久久久久久久久夜| 激情成人综合| 亚洲午夜久久久久| 欧美性色综合网| av在线播放成人| 亚洲人一二三区| 久久精品成人一区二区三区蜜臀| 日韩avvvv在线播放| 欧美日韩精品一区二区| 大胆欧美人体老妇| 亚洲国产精品ⅴa在线观看| 亚洲另类视频| 麻豆精品精品国产自在97香蕉| 日韩欧美高清一区| 国产精品二区三区四区| 香蕉成人伊视频在线观看| 欧美在线视频日韩| 成人aaaa免费全部观看| 国产精品视频第一区| 欧美一级网站| 国产在线观看免费一区| 欧美精品一区二区三| 一区二区亚洲精品| 蜜臀av亚洲一区中文字幕| 91精品国产乱码| 欧美少妇一区| 天天色图综合网| 日韩亚洲欧美成人一区| 欧美日韩一区综合| 亚洲一区二区四区蜜桃| 欧美日韩精品一区二区三区| 午夜日韩电影| 日韩电影在线观看网站| 精品电影一区二区| 亚洲欧美视频| 成人av在线一区二区三区| 亚洲伦理在线免费看| 精品视频资源站| 欧美在线三级| 日韩成人伦理电影在线观看| 日韩欧美国产午夜精品| 99国产精品久久久久久久 | 老司机精品视频导航| 2020国产精品久久精品美国| 国产一区二区三区的电影 | 亚洲一区二区av在线| 欧美一级欧美一级在线播放| 激情欧美国产欧美| 久久精品国产精品青草| 亚洲欧美在线aaa| 在线观看不卡视频| 欧美午夜一区| 老司机免费视频一区二区| 国产区在线观看成人精品| 久久亚洲不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 午夜精品免费在线| 久久精品亚洲精品国产欧美kt∨| 一本大道av一区二区在线播放| 色综合一区二区| 毛片av一区二区| 成人欧美一区二区三区在线播放| 欧美另类一区二区三区| 亚洲黄色一区| 不卡的av网站| 青青青爽久久午夜综合久久午夜| 国产精品每日更新| 日韩视频免费观看高清完整版在线观看| 亚洲麻豆av| 91麻豆视频网站| 国产美女在线精品| 五月激情综合婷婷| 国产精品久久久久精k8 | 亚洲超碰精品一区二区| 国产片一区二区三区| 欧美久久久影院| 亚洲欧美久久久| 欧美三级乱码| 成人黄色免费短视频| 日韩av一级电影| 一级日本不卡的影视| 国产欧美日韩三级| 日韩精品在线看片z| 色婷婷激情久久| 在线观看福利一区| 成人性生交大片免费看视频在线 | 亚洲狠狠婷婷| 99re这里只有精品6| 国产真实乱偷精品视频免| 五月开心婷婷久久| 自拍av一区二区三区| 久久久久久黄色| 欧美一区二区三区喷汁尤物| 久久资源av| 一区二区在线不卡| 99国产精品视频免费观看| 国产在线不卡一区| 日日噜噜夜夜狠狠视频欧美人| 亚洲视频在线一区二区| 欧美国产禁国产网站cc| 日韩一本二本av| 91精品欧美综合在线观看最新| 一本到不卡精品视频在线观看| 一道本一区二区| 伊人成年综合电影网| 97se亚洲国产综合自在线不卡| 国产一区二区三区在线看麻豆| 亚洲一区av在线| 亚洲日本va午夜在线电影| 国产精品久久综合| 久久久91精品国产一区二区精品| 日韩欧美一二三| 日韩欧美国产综合一区| 欧美二区三区的天堂| 欧美肥胖老妇做爰| 制服.丝袜.亚洲.另类.中文| 69久久99精品久久久久婷婷 | 在线观看一区二区视频| 久久综合五月| 色综合久久88色综合天天| 噜噜噜在线观看免费视频日韩| 亚洲欧美不卡| 久久精品91| 91福利在线观看| 在线日韩一区二区| 在线看不卡av| 欧美日韩在线三级| 91精品国产综合久久久久| 欧美美女一区二区在线观看| 欧美伊人精品成人久久综合97 | 91麻豆国产精品久久| 99视频在线观看一区三区| 成人h动漫精品| a4yy欧美一区二区三区| 成人精品gif动图一区| 成人av在线播放网址| 99热国产精品| 91免费看`日韩一区二区| 欧美日韩精品免费观看 | 不卡高清视频专区| jlzzjlzz亚洲日本少妇| 99久久精品一区| 欧美日韩一区综合| 一本久久综合| 久久香蕉精品| 欧美私模裸体表演在线观看| 91精品国产欧美一区二区18| 久久综合久色欧美综合狠狠|