首页 > 代码库 > 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 ();?>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。