先上圖:
本質上講,策略模式和狀態模式做得是同一件事:去耦合。怎麼去耦合?就是把幹什麼(語境類)和怎麼幹(策略介面)分開,互不依賴。打個比方,下面是我一天的行程:
class 我
逛街(){}
**啪(){}
睡覺(){}
}
但問題來了,**啪是個技術活,有著名的48式,今天到底要用哪一式呢?於是我的**變成了這樣:
class 我
逛街(){}
**啪1式(){}
**啪2式(){}
**啪3式(){}
睡覺(){}
}
但**如果是這樣的,寶寶肯會被老闆開掉的。但寶寶發現,**啪的方式其實取決於我的妹子。對三種不同型別的妹子,我的表現是不同的。
class 鬼妹 implements 妹子
}class 乖妹 implements 妹子
}class 萌妹 implements 妹子
}inte***ce 妹子
而且我驚訝地發現,所有妹子都把**啪叫做」**「。所以只要我只要知道今天晚上是和哪個妹子在一起,根據多型性,我只要說同一句話:」妹子讓我們**吧「。接下來發生的事,我只要閉上眼睛享受就好了。
class 我
睡覺();
}
於是,***:
main()
//output:
周一:i love you!
周二:ya mie die!
以上的就叫:策略模式!
但後來我發現,其實我做的每一件事都取決我的妹子,我徹底震驚了!我的生活不能沒有妹子!
class 我
逛街(妹子 今晚的妹子)
**啪(妹子 今晚的妹子)
睡覺(妹子 今晚的妹子)
}
於是終於說出了那句話:嫁給我吧!於是,她徹底走進了我的生活!
class 我
逛街()
**啪()
睡覺()
//fields
妹子 老婆 = new 乖妹子();
}
但你們是懂我的,我的小三怎麼辦呢?要是每天都能切換情人就最好了!
class 我
吃飯()
逛街()
**啪()
睡覺()
//fields
妹子 老婆 = new 乖妹子();
}
於是每一天都充滿了新鮮感呢!
main()
//output:
周一:i love you!
周二:ya mie die!
於是,我都愛上了這種叫」狀態模式「的生活方式。
說到這裡,大家一定都豁然開朗了吧!那麼,祝大家生活幸福!
狀態模式和策略模式
策略模式 商場 方案,可以有多種 買x返y,z折扣,積分,直降a。一次 活動可以只選擇其中的一種 策略,彼此之間沒有影響。狀態模式 乙個人一天的工作狀態 早上精神百倍,下午還好,晚上很累。早中晚各是一種狀態,但只有三種狀態聯合起來,才能完成 一天的狀態 這件事情,相當於把一天的狀態分成了三個部分了。...
狀態模式和策略模式比較
說到策略模式,我們最先想到的就是商店的收銀方式 不滿100,正常收費 超過100不滿300,超過的部分打八折 超過300,全價九折!解決這個問題最最普通的方法就是大量的if else 而它帶來的就是無情的難以維護,每次條件變更都會修改原 嚴重違反了開閉原則。顯而易見,策略模式的解決方式就是封裝了一系...
論策略模式和狀態模式
策略模式 定義了演算法家族,這些演算法可以相互替換。此模式讓演算法的變化,不會影響到使用演算法的客戶。也就是說讓客戶動態地使用演算法。設計原則 使用策略模式要掌握乙個原則 封裝變化,封裝是物件導向的乙個思維方式,我們要把變化的部分封裝,相同的部分抽象。狀態模式 當乙個物件的內在狀態改變時,允許改變其...