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; */
  • 相关阅读:
    Python--day34--socket模块的方法
    Python--day32--ftp文件传输报错的原因
    Python--day32--struct模块
    Python--day32--复习:https和http的区别;黏包;黏包问题的解决方式;
    快捷键(随时补充)
    turtle 20秒画完小猪佩奇“社会人”
    Kibana使用教程
    Elasticsearch: 权威指南
    數據可視化大屏
    newtonsoft文檔說明
  • 原文地址:https://www.cnblogs.com/yhdsir/p/4649214.html
Copyright © 2011-2022 走看看