设计模式之策略模式详解

来源:互联网 发布:漩涡 知乎 编辑:程序博客网 时间:2024/05/16 03:07

策略模式:将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现。
比如说我们要做这么一个项目,一个关于鸟的种类的项目,首先我们先抽象出一个Bird类,那么如果我们需要给这个Bird添加飞行的能力,我们想一下有几种解决方案:

1.继承:既然我们是面向对象编程,可以在父类中实现一个飞行的方法,子类中就可以继承父类的飞行方法。这样子的方法是简单易用,但是有一个很大的缺点就是不具有灵活性,对于未来的变更支持差。比如以后我要添加一个不会飞行的,就需要复写这个方法就很麻烦。
2.抽象方法:在父类中添加一个抽象方法,强迫子类必须实现自己的飞行行为。有点是足够灵活了,但是每一个子类不必须去实现同样的方法,就算是有同样的飞行行为也要实现同样的方法。
3.组合:在类中添加一个私有域,引用另外一个已有类的实例,通过调用引用实例的方法,从而获得新的功能。

总结
1.找出应用中需要变化的部分,把他们独立出来,不要和那些不不要变化的代码混淆在一起。
2.面向接口编程,而不是面向实现编程。
3.多用组合,少用继承。

策略模式的步骤:
1.通过分离得出的策略接口Strategy
2.Strategy的实现类
3.客户程序又一个Strategy接口
4.在客户程序中选择组装正确的Strategy实现

优点
1.使用了组合,使架构更加灵活。
2.富有弹性,可以较好的应对变化。
3.更好的代码复用性。
4.消除了大量的条件语句

应用场景
1.在应用程序中有许多相关的类仅仅是行为上的差异。
2.运行时选取不同的算法变体(比如说支付接口下有支付宝支付,农业银行支付等)
3.通过条件语句在多个分支中选一

原创粉丝点击