首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

每天一记之策略模式

2013-10-24 
每日一记之策略模式定义:策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让

每日一记之策略模式

定义:

策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

其实策略模式是一个非常重要的模式,它把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口,然后在定义一个上下文类中包含实现这个接口的类对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。

利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有策略来实现应用程序的功能,策略的实现都基于统一的接口,便于以后切换算法或增加算法而不更改现有的架构。

举个很常用的例子,我们在开发应用的过程中,常常面临着切换数据库的问题,在开发的时候,我们可能仅仅关注于某一数据库。那么在将来的运行过程中,需要却换到其他的数据库,那么应该怎么办呢,使用策略模式则很好的解决了这个问题。

下面我们来一起看看策略模式的UML类图:

每天一记之策略模式


首先我们定义了一个IDataBase的接口,用于约定算法需要实现哪些方法。然后我们写了两个策略具体的实现类,一个Mysql,另外一个Salserver。另外我们还需要一个Context上下文类来获得我们具体使用的那一个数据库。相关代码如下:


//公共接口

<?phpclass Context{    private static $db = null;        private function __construct(){        //这里可以通过配置文件得到使用什么样的数据库和数据库链接参数    }        public static function getInstanse(){        if($db === null){            return new Context();        }        return self::$db;    }}

以上代码就是策略模式的具体实现了,我们可以看到,系统在后期如果需要添加新的数据库支持,只需要新建一个策略类实现IDataBase接口,然后更改配置项就可以轻松的进行数据库切换了。


热点排行