Design patterns 战略模式和状态模式的区别——以实例为例
虽然同一主题有很多问题,但没有一个能完全消除我的困惑。因此,我试图用这两种模式给出一个示例及其解决方案 请告诉我我做得对还是错 课程:Design patterns 战略模式和状态模式的区别——以实例为例,design-patterns,strategy-pattern,state-pattern,Design Patterns,Strategy Pattern,State Pattern,虽然同一主题有很多问题,但没有一个能完全消除我的困惑。因此,我试图用这两种模式给出一个示例及其解决方案 请告诉我我做得对还是错 课程: 之前条件:定义电压水平、燃油量、转子皮带条件 面包师:烘焙饼干的机器 LowSpeedBaker、HighSpeedBaker、MediumSpeedBaker:Baker的各种实现或状态 BakerStateFactory:它接受BeforeCondition并返回Baker的状态之一 实施1: 客户在条件之前创建,并从BakerStateFactory获
- 之前条件:定义电压水平、燃油量、转子皮带条件
- 面包师:烘焙饼干的机器
- LowSpeedBaker、HighSpeedBaker、MediumSpeedBaker:Baker的各种实现或状态
- BakerStateFactory:它接受BeforeCondition并返回Baker的状态之一
在第二种实现中,机器本身可以决定其状态并相应地工作。如果需要,它还可以在进程之间自由更改其状态。这是状态模式。基于您的示例场景: 当每个烘焙过程只使用一个算法时,您希望使用策略模式。有许多算法,但对于每个烘焙过程,您只使用其中一个。在这种情况下,你对面包师的策略可能是Cookie过程、Pizza过程。。。要烘焙比萨饼,请将面包师配置为使用比萨饼过程。然后将配料传递到bake()方法,比萨饼就会被发送到您的邮箱。继续这样做,因为在这里考虑返回类型可能会让人困惑,最终也会与工厂模式发生冲突。当您将面包师配置为使用CookieProcess时,面包师会烘焙它们,并将其中一半发送到您奶奶的邮箱 因此,这里有两种不同的策略:
- 在220摄氏度下烘烤并发送至邮箱
- 在180摄氏度下烘烤,然后寄给你和你奶奶
你最终会遇到一个面包师,他可以使用不同的策略(比萨饼、饼干)。它们中的每一个都使用一些状态来完成。然而,战略决定了哪些状态可能被跳过或交换。(该策略可能有一个方法ispreferingforced())基于您的示例场景: 当每个烘焙过程只使用一个算法时,您希望使用策略模式。有许多算法,但对于每个烘焙过程,您只使用其中一个。在这种情况下,你对面包师的策略可能是Cookie过程、Pizza过程。。。要烘焙比萨饼,请将面包师配置为使用比萨饼过程。然后将配料传递到bake()方法,比萨饼就会被发送到您的邮箱。继续这样做,因为在这里考虑返回类型可能会让人困惑,最终也会与工厂模式发生冲突。当您将面包师配置为使用CookieProcess时,面包师会烘焙它们,并将其中一半发送到您奶奶的邮箱 因此,这里有两种不同的策略:
- 在220摄氏度下烘烤并发送至邮箱
- 在180摄氏度下烘烤,然后寄给你和你奶奶