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 ();
    
    ?>
  • 相关阅读:
    WebAPI搭建(一)如何在Webforms 下 搭建WebAPI
    解决VS2010在新建实体数据模型出现“在 .NET Framework Data Provider for Microsoft SQL Server Compact 3.5 中发生错误。请与提供程序供应商联系以解决此问题。”的问题
    ASP.NET 解决在点击Button执行服务器事件之前验证用户输入并阻塞
    python中强大的list
    除法运算和四舍五入
    python的基本数学运算
    配置python环境
    唠叨一些关于Python的事情
    人生苦短,我用python
    ASP.NET MVC4实现TinyMCE 4.0.20自定义上传功能
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/3855949.html
Copyright © 2011-2022 走看看