设计模式之---策略模式

 一、模式定义
    定义一个算法家族,包含一组可替换的算法。策略模式使得算法和算法的使用者之间的解耦;并使得使用者可以动态的使用算法家族中的任何一个算法。

二、体现的设计原则
    策略模式体现出了一下3个设计原则:
    1.  独立出应用中需要变化的部分,和不经常变换的部分想分离。比如算法就属于经常变化的部分,将其独立出来,修改或者扩展时,不会影响到使用者。
    2.  针对接口编程,而不是针对实现编程。定义算法家族时,必然会定义一个抽象基类,提供算法能提供的全部接口。以便用多态实现动态算法。
    3.  组合优于继承。组合的关系使得代码更加灵活,比如策略的使用者和策略之间是has-a的关系。
三、UML图示
    《设计模式之---策略模式》

四、应用场景

    1. 系统需要在几种算法之间快速切换。

    2. 重构代码时,替换多重条件选择语句。

五、注意事项

    1. 每种策略只实现一种算法。

    2. 如果选择策略时,仍旧依赖输入参数,则可以配合简单工厂模式封装创建具体模式实例的代码。

六、举例说明

     例如一个截图软件中,最后生成的图片格式多种多样,可以是N位bmp,jpg,  gif 等等。每种图片类型的生成算法肯定都不一样,这里就可以应用策略模式,将图片生成算法包装成一个一个具体的策略类,在context中根据用户的菜单操作来选择。

七、代码示例

    维基百科:
http://zh.wikipedia.org/wiki/%E7%AD%96%E7%95%A5%E6%A8%A1%E5%BC%8F

点赞