策略模式和狀態模式在類圖上十分相似。都是高擴充套件性的設計。
兩者最重要的區別是: 1. 策略模式封裝的是不同的演算法,演算法之間沒有互動,以達到演算法可以自由切換的目的。2. 狀態模式封裝的是不同的狀態,以達到狀態切換行為隨之發生改變的目的。
舉乙個場景。人在孩童時期玩耍,成年工作,老年退休。
按照策略模式是3種不同的工作方式,而按照狀態模式,,則是認為人的狀態不同產生了不同的行為結果,這裡的行為相同,都是工作。
狀態模式的實現特點是:public abstract class workalgorithm
public class childwork extends workalgorithm
}public class audltwork extends workalgorithm
}public class oldwork extends workalgorithm
}public class context
public workalgorithm getwork()
public void work()
}public class client
}
狀態本身持有上下文, 上下文又持有狀態
public abstract class humanstate
public abstract void work();
}public class childstate extends humanstate
}public class adultestate extends humanstate
}public class oldstate extends humanstate
}public class human
public void work()
}public class client
}
行為類模式PK 一 策略模式和命令模式
行為類模式比較多 責任鏈模式,命令模式,直譯器模式,迭代器模式,訪問者模式,備忘錄模式,中介者模式,觀察者模式,狀態模式,策略模式,模板方法。11個 策略模式由上下文封裝具體的策略類,策略類具體執行。命令模式,命令封裝具體的命令接收者,命令接收者負責具體實現。由invoker呼叫命令。以 zip和g...
行為模式 策略模式
策略模式定義了一系列演算法,並將每個演算法封裝起來,使他們可以相互替換,且演算法的變化不會影響到使用演算法的客戶。需要設計乙個介面,為一系列實現類提供統一的方法,多個實現類實現該介面。設計乙個抽象類,提供輔助函式。抽象策略類介面 public inte ce carfunction 定義乙個策略實現...
狀態模式和策略模式
策略模式 商場 方案,可以有多種 買x返y,z折扣,積分,直降a。一次 活動可以只選擇其中的一種 策略,彼此之間沒有影響。狀態模式 乙個人一天的工作狀態 早上精神百倍,下午還好,晚上很累。早中晚各是一種狀態,但只有三種狀態聯合起來,才能完成 一天的狀態 這件事情,相當於把一天的狀態分成了三個部分了。...