zoukankan      html  css  js  c++  java
  • 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 ();
    
    ?>
  • 相关阅读:
    webbench 网站压力测试
    php测试工具
    数据库相关文章转载(2) MySQL自带的性能压力测试工具mysqlslap详解
    数据库相关文章转载(1) MySQL性能优化之参数配置
    绿盟RSAS配置小记
    ubuntu14.04 64位安装H3C iNode客户端
    Ubuntu安装iNOde
    CTF中图片隐藏文件分离方法总结
    信息安全铁人三项比赛答案
    360春秋杯CTF比赛WRIteUP
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/3855949.html
Copyright © 2011-2022 走看看