设计模式探索:Observer与Strategy模式应用分析

需积分: 15 1 下载量 140 浏览量 更新于2024-08-22 收藏 13.34MB PPT 举报
"这篇文档是关于设计模式的讨论,特别是关注Observer模式的后续内容,以及Strategy模式的应用和问题。文章通过一个模拟鸭子游戏的例子,展示了如何在软件设计中遇到问题并寻求解决方案的过程。" 在设计模式中,Observer模式是一种行为模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。然而,本摘要主要关注的是Strategy模式。 Strategy模式是一种行为设计模式,它使你能在运行时改变对象的行为。在这个例子中,公司开发的游戏“SimUDuck”中,不同类型的鸭子有不同的行为,比如飞行和叫声。最初,Joe打算通过继承的方式在Duck超类中添加fly()方法,以为所有子类都能飞行。但这个决定导致了问题,因为橡皮鸭不应该会飞。这揭示了一个关键的问题:过度依赖继承可能导致不合适的共享行为。 Joe首先尝试通过覆盖橡皮鸭子的fly()方法来修复问题,但这并不是一个理想的解决方案,因为每次添加新类型的鸭子时,都可能需要检查和修改多个方法。这种方法显然不具备扩展性。 接着,Joe考虑使用接口。接口是一种定义行为的方式,对象可以实现接口来表示它支持特定的行为,而无需继承特定的类。这种方式允许鸭子的飞行和叫声行为独立于它们的实现,从而提供更大的灵活性。当需要增加新的鸭子类型,如诱饵鸭,只需确保它们实现适当的接口即可,无需修改已有的代码。 通过引入Strategy模式,Joe可以将飞行和叫声等行为抽象为独立的策略对象,鸭子类不再直接包含这些行为,而是持有指向策略对象的引用。这样,鸭子的行为可以根据需要动态地改变,符合开闭原则(对扩展开放,对修改关闭),使得代码更具维护性和可扩展性。 总结来说,这个故事强调了在设计系统时,理解并正确使用设计模式的重要性。Observer模式强调观察者与被观察者之间的通信,而Strategy模式则提供了动态改变对象行为的能力。这两种模式在软件工程中都有其应用场景,合理运用可以极大地提高代码的灵活性和可维护性。