现在的位置: 首页 > 综合 > 正文

设计模式之(二十)策略模式(strategy)

2018年05月21日 ⁄ 综合 ⁄ 共 1438字 ⁄ 字号 评论关闭

常用

GOF《设计模式》一书对Strategy模式是这样描述的:

 

定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换。Strategy模式使算法可独立于使用它的客户而变化。

 

Strategy模式以下列几条原则为基础:

 

1)每个对象都是一个具有职责的个体。

 

2)这些职责不同的具体实现是通过多态的使用来完成的。

 

3)概念上相同的算法具有多个不同的实现,需要进行管理。

 

uml图如下所示:
strategy

 

下面我将通过一个实例来说明它的具体使用,这个例子是关于数据库连接的。代码如下:

 

输出结果:

处理Mysql数据库连接

 

处理Oracle数据库连接

 

在我们的实际编程中经常会遇到系统要连接的数据库可能不只一种,如果采用传统的方法,即修改连接Url的方法,这种方法确实可行,但是有一个问题要经常修改源代码,不利于以后的维护,那么有没有一种更好的方法呢?答案是有,使用Strategy模式,首先定义一个连接数据库通用的接口(在上面的例子中是DatabaseStrategy),然后再定义实现该接口的具体类(MysqlDBStrategy、OracleDBStrategy),在这些具体类,实现具体的逻辑。最后再定义一个管理数据库连接的类(DataBaseManager),它的内部有一个方法可以接受具体类实例的参数。我们可以看到这个参数是DatabaseStrategy类型的,也就是说它可以接受任何一个实现了DatabaseStrategy接口的类的具体实例(这里运用了对象替换机制,多态的一种),从而完成数据库连接的处理。如果我们还需要处理另外一种数据库如sqlserver,我们只需要建立一个SqlserverDBStrategy类实现DatabaseStrategy接口,把该类的实例传给DatabaseManager的process方法即可。

 

小结:Strategy模式是一种定义一系列算法的方法。概念上看,这些算法完成的都是相同的工作,只是实现不同。

 

 

 

抱歉!评论已关闭.