zoukankan      html  css  js  c++  java
  • simple--factory--abstract

    <?php
    /* 示例2: */
    //简单工厂模式
    /*
     * 定义运算类
     */
    abstract class Operation {
     
        protected $_NumberA = 0;
        protected $_NumberB = 0;
        protected $_Result  = 0;
         
        public function __construct($A,$B){
            $this->_NumberA = $A;
            $this->_NumberB = $B;
        }
         
        public function setNumber($A,$B){
            $this->_NumberA = $A;
            $this->_NumberB = $B;
        }
         
        
        /* protected function clearResult(){
            $this->_Result  = 0;
        } */
        
         
        public function clearResult(){
            return $this->_Result  = 0;
        }
         
        //抽象方法无方法体
        abstract protected function getResult();
         
    }
     
    //继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;
    //另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松)
    class OperationAdd extends Operation {
     
        public function getResult(){
            $this->_Result=$this->_NumberA + $this->_NumberB;
            return $this->_Result;
        }
     
    }
     
    class OperationSub extends Operation {
     
        public function getResult(){
            $this->_Result=$this->_NumberA - $this->_NumberB;
            return $this->_Result;
        }
     
    }
     
    class OperationMul extends Operation {
     
        public function getResult(){
            $this->_Result=$this->_NumberA * $this->_NumberB;
            return $this->_Result;
        }
     
    }
     
    class OperationDiv extends Operation {
     
        public function getResult(){
            $this->_Result=$this->_NumberA / $this->_NumberB;
            return $this->_Result;
        }
     
    }
     
    class OperationFactory {
     
        //创建保存实例的静态成员变量
        private static $obj;
     
        //创建访问实例的公共的静态方法
        public static function CreateOperation($type,$A,$B){
            switch($type){
                case '+':
                    self::$obj = new OperationAdd($A,$B);
                    break;
                case '-':
                    self::$obj = new OperationSub($A,$B);
                    break;
                case '*':
                    self::$obj = new OperationMul($A,$B);
                    break;
                case '/':
                    self::$obj = new OperationDiv($A,$B);
                    break;
            }
            return self::$obj;
        }
     
    }
     
    /* 
    $obj = OperationFactory::CreateOperation('+');
    $obj->setNumber(4,4);
     */
    $obj = OperationFactory::CreateOperation('*',5,6);
    echo $obj->getResult();        //30
    echo "<br/>";
    echo $obj->clearResult();    //0
    echo '<br>';
    /* echo $obj->_Result; */
  • 相关阅读:
    C#入门
    使用 OLEDB 及 SqlBulkCopy 将多个不在同一文件夹下的 ACCESS mdb 数据文件导入MSSQL
    aspose.word 读取word段落内容
    Jquery+Aajax 批量上传
    asp.net mvc web api Token验证
    iframe父页面和子页面获取元素和js变量
    JavaScrpt常用的封装方法
    ASP.NET MVC 导出Word报表
    Asp.net的对Excel文档的导入导出操作
    C++ 复制vector值到array,复制 array 到jintArray
  • 原文地址:https://www.cnblogs.com/yhdsir/p/4649214.html
Copyright © 2011-2022 走看看