策略模式 状态模式 比较

时间:2022-11-11 21:59:19
策略模式类图
策略模式 状态模式 比较 策略模式 状态模式 比较
状态模式类图 策略模式 状态模式 比较        策略模式 状态模式 比较           类图是一样的。但是这两个模式的差别在于它们的意图。         状态模式中,我们将一些行为封装在状态对象中,context的行为随时可以委托到那些状态对象中的一个。context的内部状态在状态对象集合范围内变化,context的行为也会随着内部状态变化而变化。但是context的客户端对于状态对象的了解不多,甚至完全不了解。          策略模式,客户端通常要指定context所要组合的策略对象是哪一个,即客户端需要包含必要的逻辑判断。虽然策略模式能够在运行时改变策略,但是对于某个context对象来说,通常只有一个最适当的策略对象。          一般来说,我们认为策略模式是继承的一种弹性替代方式。如果你用继承定义了一个类的行为,你将被这个行为困住,甚至很难修改它。但是,你可以用策略模式通过组合不同对象的方式来弹性的改变行为。          通常将状态模式作为context中有大量逻辑判断的替换。通过将行为封装到状态对象中,你可以很容易的通过改变context的状态对象来改变其的行为,
总结: 状态模式,当Context对象被创建后,只需告诉它从什么状态开始,然后状态就会随着context方法的调用而自动改变。而策略模式中,策略的改变需由客户端通过逻辑判断来实现。