设计模式中的撩妹神技--下篇
? ? ?開篇前言
遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經風雨慢慢變老,回首走過的點點滴滴,依然清楚的記得當初愛情萌芽的模樣,時維十一月,眼看著光棍節就那么輕輕的來了,沒有預告,沒有準備`(*∩_∩*)′,是否想在雙十一擺脫單身,和親愛的ta牽手漫步,在寒風中緊緊相擁,都說藝術來源于生活,卻高于生活,作為人類智慧的結晶設計模式,她蘊藏著豐富的撩妹技術,今天這篇博文,小編主要介紹狀態模式中的撩妹神技。
? ? ? ?什么是狀態模式
當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類,狀態模式主要解決的是當控制一個對象狀態的條件表達式過于復雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把復雜的判斷邏輯簡化,一句話來說就是,當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類,我們來看一下狀態模式的結構圖,如下所示:
狀態模式中的撩妹神技
新建項目State,新建類和類MM、Boy,編寫相關的代碼部分,如下所示:
package com.dp.state;public class MM {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}} Boy的代碼如下所示: package com.dp.state;public class Boy {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}} 小伙伴們都知道MM的狀態是非常不固定的,恰似六月的天,像娃娃的臉,說變就變,MM是個易變得動物,前一個月還海誓山盟,后一個月擦肩而過,形同陌路,作為MM來講,她會有一些方法,會哭、會笑、會說,編寫代碼,如下所示:package com.dp.state;public class MM {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void smile(){}public void cry(){}public void say(){} } MM在不同狀態的時候,這些方法的實現是不相同的,狀態決定方法該如何執行。這個時候我們就可以瘋傳一個state,新建類MMState,代碼如下所示:
package com.dp.state;public abstract class MMState {public abstract void smile();public abstract void cry();public abstract void say(); } MMState這個類有一些具體的子類,比如haapy的狀態,如下所示: package com.dp.state;public class MMHappyState extends MMState {@Overridepublic void smile() {// TODO Auto-generated method stub}@Overridepublic void cry() {// TODO Auto-generated method stub}@Overridepublic void say() {// TODO Auto-generated method stub}} MM還可以有unHappy的狀態,編寫代碼如下所示: package com.dp.state;public class MMUnHappyState extends MMState {@Overridepublic void smile() {// TODO Auto-generated method stub}@Overridepublic void cry() {// TODO Auto-generated method stub}@Overridepublic void say() {// TODO Auto-generated method stub}} 這個時候MM的代碼就可以這樣來編寫,如下所示: package com.dp.state;public class MM {private String name;private MMState state = new MMHappyState();public String getName() {return name;}public void setName(String name) {this.name = name;}public void smile(){state.smile();}public void cry(){state.cry();}public void say(){state.say();} } 這就是State模式,設計模式的區別往往是在語義上,而不是在語法上,接著我們來看一下狀態模式的優缺點。
狀態模式的優缺點
優點:
a、封裝了轉換規則。
b、枚舉可能的狀態,在枚舉狀態之前需要確定狀態種類。?
c、將所有與某個狀態有關的行為放到一個類中,并且可以方便地增加新的狀態,只需要改變對象狀態即可改變對象的行為。?
d、允許狀態轉換邏輯與狀態對象合成一體,而不是某一個巨大的條件語句塊。?
e、?可以讓多個環境對象共享一個狀態對象,從而減少系統中對象的個數。
缺點:
a、狀態模式的使用必然會增加系統類和對象的個數。?
b、狀態模式的結構與實現都較為復雜,如果使用不當將導致程序結構和代碼的混亂。?
c、狀態模式對“開閉原則”的支持并不太好,對于可以切換狀態的狀態模式,增加新的狀態類需要修改那些負責狀態轉換的源代碼,否則無法切換到新增狀態;而且修改某個狀態類的行為也需修改對應類的源代碼。
? ? 狀態模式的應用場景
a、當一個對象狀態轉換的條件表達式過于復雜時可以使用狀態者模式。把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把復雜的判斷邏輯簡單化。
b、當一個對象行為取決于它的狀態,并且它需要在運行時刻根據狀態改變它的行為時,就可以考慮使用狀態者模式。
小編寄語:該博文小編主要介紹了設計模式中的撩妹神技之狀態模式,小編從什么是狀態模式、狀態模式的結構圖,撩妹的Demo,狀態模式的優缺點以及狀態模式的優缺點,不知道單身的你,有沒有從小編的系列博客中受到啟發呢,雙十一在即,單身的你,還在等什么,趕緊行動吧`(*∩_∩*)′,或許就在你讀完小編博文的時候,你和ta在轉角的咖啡屋不期而遇,面對眼前的這個人,ta淡雅如風,你笑魘如花......
總結
以上是生活随笔為你收集整理的设计模式中的撩妹神技--下篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++语法(二十)常函数、常对象
- 下一篇: 14WPF---关键帧动画