尽管关于同一个主题有很多问题,但没有一个能完全消除我的困惑。所以我试图用这两种模式举一个例子及其解决方案。
请告诉我我做对了还是做错了什么。
课程:
- BeforeCondition : 定义电压等级、燃料量、转子皮带状况
- Baker : 烘烤饼干的机器
- LowSpeedBaker、HighSpeedBaker、MediumSpeedBaker:Baker 的各种实现或状态。
- BakerStateFactory:它接受 BeforeCondtion 并返回 Baker 的状态之一。
实施1:
客户端创建BeforeCondition并从BakerStateFactory获取适当的面包师。现在它调用面包师的 bake()。
实施2:
客户不关心机器如何工作。它只是将 BeforeCondition 传递给 Baker 机器。Baker 机器本身根据 BeforeCondition 决定其状态。
结论
第一个实现让客户端决定状态或必须注入什么实现。机器是否可以在该条件下实际工作并不关心。这是策略模式。
在第二种实现中,机器可以自行决定其状态并相应地工作。如果需要,它还可以在进程之间自由更改其状态。这是状态模式。