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

?>
posted @ 2014-07-20 10:47  timelesszhuang  阅读(167)  评论(0编辑  收藏  举报