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 ();
    
    ?>
  • 相关阅读:
    java内存溢出
    jstack命令使用
    JVM问题排查步骤
    c++指针常量和常量指针
    c++ 通讯录
    冒泡排序
    翻转数组
    敲桌子
    求一个100-999之间的水仙花数
    elasticsearch 模板的使用
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/3855949.html
Copyright © 2011-2022 走看看