Java 策略模式和狀態模式

2021-09-22 16:52:46 字數 1575 閱讀 3540

先上圖:

本質上講,策略模式和狀態模式做得是同一件事:去耦合。怎麼去耦合?就是把幹什麼(語境類)和怎麼幹(策略介面)分開,互不依賴。打個比方,下面是我一天的行程:

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 而它帶來的就是無情的難以維護,每次條件變更都會修改原 嚴重違反了開閉原則。顯而易見,策略模式的解決方式就是封裝了一系...

論策略模式和狀態模式

策略模式 定義了演算法家族,這些演算法可以相互替換。此模式讓演算法的變化,不會影響到使用演算法的客戶。也就是說讓客戶動態地使用演算法。設計原則 使用策略模式要掌握乙個原則 封裝變化,封裝是物件導向的乙個思維方式,我們要把變化的部分封裝,相同的部分抽象。狀態模式 當乙個物件的內在狀態改變時,允許改變其...