首页 > 代码库 > php设计模式2策略模式

php设计模式2策略模式

<?php/** ****************************************************** * 策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中, * 从而使得它们可以相互替换。策略模式使得算法可以 在不影响到客户端的情况下发生变化。 * 策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。 * 由于算法和环境独立开来,算法的增减,修改都不会影响到环境和客户端。 * ********************************************************* *//* * 数据源保存方式接口 定义了数据源操作的四种基本方式 (增,删,改,查) */interface data_source {    public function add();    public function delete();    public function edit();    public function find();}/** * 数据库保存方式具体类 * 具体的数据源接口的一种形式,该形式是把数据保存到数据库 */class mysql_datasource implements data_source {    public function add() {        echo ‘mysql数据添加‘;    }    public function delete() {        echo ‘mysql数据删除‘;    }    public function edit() {        echo ‘mysql数据修改‘;    }    public function find() {        echo ‘mysql数据查询‘;    }}/** * oracle保存方式具体类 * 具体的数据源接口的另一种形式,该形式是把数据保存到oracle数据库 */class oracle_datasource implements data_source {    public function add() {        echo ‘oracle数据添加‘;    }    public function delete() {        echo ‘oracle数据删除‘;    }    public function edit() {        echo ‘oracle数据编辑‘;    }    public function find() {        echo ‘oracle数据查询‘;    }}/** * 文件保存方式具体类 * 具体的数据源接口的另一种形式,该形式是把数据保存到文件 */class file_datasource implements data_source {    public function add() {        echo ‘file数据添加‘;    }    public function delete() {        echo ‘file数据删除‘;    }    public function edit() {        echo ‘file数据编辑‘;    }    public function find() {        echo ‘file数据查找‘;    }}/** * 策略类 * 该类根据要求返回符合要求类别的的数据源 * 本例 $strategyName = db_source 或者 $strategyName = file_source */class strategy {    public static function getstrategy($data_source) {        return new $data_source ();    }}/** * 主体事件处理类 */class control {    private $datasource;    public function __construct($datasource) {        $this->datacource = strategy::getstrategy ( $datasource );    }    public function add() {        $this->datacource->add ();    }    public function edit() {        $this->datacource->edit ();    }    public function delete() {        $this->datacource->delete ();    }    public function find() {        $this->datacource->find ();    }}header ( ‘content-type:text/html;charset=utf-8‘ );$datasource = "file_datasource";$concretecontrol = new control ( $datasource );$concretecontrol->add ();?>