Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

README.md

策略模式

概述

在开发过程中,我们会遇到使用多种算法或策略实现某一功能。比如要实现用户的登录,用户可以通过表单提交,也可以发起AJAX请求。这时候我们就要为登录功能编写两种不同的算法了。在实现的时候通常会在同一个类里面编写多种算法,然后使用if...else...或者case等条件判断语句来进行选择执行哪种算法。那么问题来了,假如有一天,需要增加几个登录的方案,那么就要在类里面编写更多的方法,还需要修改条件判断语句,这样的类比较复杂,难以维护。策略模式就是定义了算法族,分别封装起来,让它们之间可以相互替换,策略模式让算法的变化独立于使用算法的客户。

结构

策略模式结构图

Context类维护一个对Strategy对下的引用,可定义一个结构让Strategy访问它的数据。

Strategy类定义所有支持的算法的公共接口。

ConcreteStrategy以Strategy接口实现某种具体的算法

实现

以出行旅游为例,我们可以有几个策略可以考虑:可以骑自行车,搭火车,搭飞机。每个策略都可以达到去旅游的目的,但是它们使用了不同的资源。具体实现看代码。

总结与分析

策略模式是对算法的封装。通常会把一系列算法封装到一系列的作为抽象策略类的子类里面

策略模式是针对接口编程