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 ();



?>

你可能感兴趣的:(设计模式)