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