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