亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php面向對象之工廠模式示例

2024-09-04 11:43:48
字體:
來源:轉載
供稿:網友

工廠模式是什么?是不是在工廠做事呢?我相信有一些朋友對于php工廠模式還是有一些不理解,下文整理一些關于工廠模式例子.

簡單工廠模式:

①抽象基類:類中定義抽象一些方法,用以在子類中實現

②繼承自抽象基類的子類:實現基類中的抽象方法

③工廠類:用以實例化對象

php面向對象之工廠模式示例,先看一種代碼:

  1. <?php 
  2.     class Calc{ 
  3.         /** 
  4.          * 計算結果 
  5.          * 
  6.          * @param int|float $num1 
  7.          * @param int|float $num2 
  8.          * @param string $operator 
  9.          * @return int|float 
  10.          */ 
  11.         public function calculate($num1,$num2,$operator){ 
  12.             try { 
  13.                 $result=0; 
  14.                 switch ($operator){ 
  15.                     case '+'
  16.                         $result$num1+$num2
  17.                         break
  18.                     case '-'
  19.                         $result$num1-$num2
  20.                         break
  21.                     case '*'
  22.                         $result$num1*$num2
  23.                         break
  24.                     case '/'
  25.                         if ($num2==0) { 
  26.                             throw new Exception("除數不能為0"); 
  27.                         } 
  28.                         $result$num1/$num2
  29.                         break
  30.                 } 
  31.             return $result
  32.             }catch (Exception $e){ 
  33.                 echo "您輸入有誤:".$e->getMessage(); 
  34.             } 
  35.         } 
  36.     } 
  37.     $test=new Calc(); 
  38. //    echo $test->calculate(2,3,'+');//打印:5 
  39.     echo $test->calculate(5,0,'/');//打印:您輸入有誤:除數不能為0 
  40. ?> 

優點:以上代碼使用了面向對象的封裝特性,只要有了include這個類,其他頁面就可以隨便使用了.

缺點:無法靈活的擴展和維護

比如:想要增加一個“求余”運算,需要在switch語句塊中添加一個分支語句,代碼需要再加一個case進行判斷,于是產生了以下問題.

①需要改動原有的代碼塊,可能會在為了“添加新功能”而改動原有代碼的時候,不小心將原有的代碼改錯了.

②如果要添加的功能很多,比如:‘乘方’,‘開方’,‘對數’,‘三角函數’,‘統計’,或者添加一些程序員專用的計算功能,比如:And, Or, Not, Xor,這樣就需要在switch語句中添加N個分支語句,想象下,一個計算功能的函數如果有二三十個case分支語句,代碼將超過一屏,不僅令代碼的可讀性大大降低,關鍵是,為了添加小功能,還得讓其余不相關都參與解釋,這令程序的執行效率大大降低.

解決途徑:采用OOP的繼承和多態思想.

  1. <?php 
  2.      /** 
  3.       * 操作類 
  4.       * 因為包含有抽象方法,所以類必須聲明為抽象類 
  5.       */ 
  6.      abstract class Operation{ 
  7.          //抽象方法不能包含函數體 
  8.          abstract public function getValue($num1,$num2);//強烈要求子類必須實現該功能函數 
  9.      } 
  10.      /** 
  11.       * 加法類 
  12.       */ 
  13.      class OperationAdd extends Operation { 
  14.          public function getValue($num1,$num2){ 
  15.              return $num1+$num2
  16.          } 
  17.      } 
  18.      /** 
  19.       * 減法類 
  20.       */ 
  21.      class OperationSub extends Operation { 
  22.          public function getValue($num1,$num2){ 
  23.              return $num1-$num2
  24.          } 
  25.      } 
  26.      /** 
  27.       * 乘法類 
  28.       */ 
  29.      class OperationMul extends Operation { 
  30.          public function getValue($num1,$num2){ 
  31.              return $num1*$num2
  32.          } 
  33.      } 
  34.      /** 
  35.       * 除法類 
  36.       */ 
  37.      class OperationDiv extends Operation { 
  38.          public function getValue($num1,$num2){ 
  39.              try { 
  40.                  if ($num2==0){ 
  41.                      throw new Exception("除數不能為0"); 
  42.                  }else { 
  43.                      return $num1/$num2
  44.                  } 
  45.              }catch (Exception $e){ 
  46.                  echo "錯誤信息:".$e->getMessage(); 
  47.              } 
  48.          } 
  49.      } 
  50.  ?> 
  51.  
  52.  <?php 
  53.      /** 
  54.       * 操作類 
  55.       * 因為包含有抽象方法,所以類必須聲明為抽象類 
  56.       */ 
  57.      abstract class Operation{ 
  58.          //抽象方法不能包含函數體 
  59.          abstract public function getValue($num1,$num2);//強烈要求子類必須實現該功能函數 
  60.      } 
  61.      /** 
  62.       * 加法類 
  63.       */ 
  64.      class OperationAdd extends Operation { 
  65.          public function getValue($num1,$num2){ 
  66.              return $num1+$num2
  67.          } 
  68.      } 
  69.      /** 
  70.       * 減法類 
  71.       */ 
  72.      class OperationSub extends Operation { 
  73.          public function getValue($num1,$num2){ 
  74.              return $num1-$num2
  75.          } 
  76.      } 
  77.      /** 
  78.       * 乘法類 
  79.       */ 
  80.      class OperationMul extends Operation { 
  81.          public function getValue($num1,$num2){ 
  82.              return $num1*$num2
  83.          } 
  84.      } 
  85.      /** 
  86.       * 除法類 
  87.       */ 
  88.      class OperationDiv extends Operation { 
  89.          public function getValue($num1,$num2){ 
  90.              try {  //開源軟件:Vevb.com 
  91.                  if ($num2==0){ 
  92.                      throw new Exception("除數不能為0"); 
  93.                  }else { 
  94.                      return $num1/$num2
  95.                  } 
  96.              }catch (Exception $e){ 
  97.                  echo "錯誤信息:".$e->getMessage(); 
  98.              } 
  99.          } 
  100.      } 
  101.  ?> 

這里采用了面向對象的繼承特性,首先聲明一個虛擬基類,在基類中指定子類務必實現的方法(getValue()).

分析:通過采用面向對象的繼承特性,我們可以很容易就能對原有程序進行擴展,比如:‘乘方’,‘開方’,‘對數’,‘三角函數’,‘統計’等等.

我們只需要另外寫一個類(該類繼承虛擬基類),在類中完成相應的功能(比如:求乘方的運算),而且大大的降低了耦合度,方便日后的維護及擴展.

現在還有一個問題未解決,就是如何讓程序根據用戶輸入的操作符實例化相應的對象呢?

解決辦法:使用一個單獨的類來實現實例化的過程,這個類就是工廠.

  1. <?php 
  2.     /** 
  3.      * 工程類,主要用來創建對象 
  4.      * 功能:根據輸入的運算符號,工廠就能實例化出合適的對象 
  5.      * 
  6.      */ 
  7.     class Factory{ 
  8.         public static function createObj($operate){ 
  9.             switch ($operate){ 
  10.                 case '+'
  11.                     return new OperationAdd(); 
  12.                     break
  13.                 case '-'
  14.                     return new OperationSub(); 
  15.                     break
  16.                 case '*'
  17.                     return new OperationSub(); 
  18.                     break
  19.                 case '/'
  20.                     return new OperationDiv(); 
  21.                     break
  22.             } 
  23.         } 
  24.     } 
  25.     $test=Factory::createObj('/'); 
  26.     $result=$test->getValue(23,0); 
  27.     echo $result
  28. ?> 

我對些的總結就是:根據傳遞的參數(對象)不同,調用不同的工廠(類),然后用以實現指定的功能,比較大的好處就是簡化了以前函數化編程的switch case,if else之類,進行類的分發,不同的東西調用不同的類.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲摸下面视频| 亚洲欧洲国产精品| 国产精品久久久久影院日本| 欧美黑人性猛交| 日本成人黄色片| 国产精品看片资源| 最近2019中文字幕大全第二页| 亚洲欧洲午夜一线一品| 国产精品久久久久久久天堂| 日本一本a高清免费不卡| 国产91色在线|| 久久夜精品香蕉| 精品久久香蕉国产线看观看亚洲| 国产福利精品av综合导导航| 欧美在线视频网| 91视频国产一区| 日韩精品日韩在线观看| 欧美性猛交xxx| 色哟哟网站入口亚洲精品| 91国产在线精品| 国产一级揄自揄精品视频| 国产日韩在线免费| 欧美日韩亚洲国产一区| 亚洲女人天堂色在线7777| 成人精品福利视频| 欧洲精品毛片网站| 欧美孕妇毛茸茸xxxx| 97久久精品在线| 日本一区二区不卡| 精品国产91久久久| 日韩欧美精品中文字幕| 亚洲激情在线观看视频免费| 精品国产欧美一区二区五十路| 国产拍精品一二三| 欧美在线影院在线视频| 日日噜噜噜夜夜爽亚洲精品| 色综合色综合网色综合| 欧美午夜精品在线| 亚洲品质视频自拍网| 中文字幕久热精品视频在线| 久久韩剧网电视剧| 久久久久久欧美| 伊人久久久久久久久久久| 久久久久久com| 91国产视频在线| 亚洲欧美日韩中文视频| 欧美高清视频在线观看| 亚洲网站在线播放| 自拍偷拍亚洲精品| 日韩一区视频在线| 国产成人一区二区三区电影| 成人免费淫片aa视频免费| 国产精品亚洲欧美导航| 色偷偷888欧美精品久久久| 久久天天躁狠狠躁夜夜躁2014| 日本亚洲欧美成人| 日韩精品免费在线视频| 日韩高清电影免费观看完整| 欧美视频中文字幕在线| 97精品伊人久久久大香线蕉| 国产精品高潮呻吟久久av无限| 欧美性xxxx在线播放| 欧美精品制服第一页| 98精品在线视频| 欧美性猛交xxxxx免费看| 国产精品视频久| 综合国产在线视频| 亚洲欧美日韩中文在线制服| 午夜精品在线视频| 亚洲美女精品久久| 日本成人激情视频| 欧美中文字幕在线播放| 91精品国产高清久久久久久91| 久久久久北条麻妃免费看| 日本久久久久久久久久久| 国产91网红主播在线观看| 久久亚洲精品小早川怜子66| 夜夜躁日日躁狠狠久久88av| 亚洲aa在线观看| 国产福利精品视频| 午夜精品免费视频| 日本午夜精品理论片a级appf发布| 欧美丝袜一区二区三区| 亚洲福利在线视频| 欧美在线视频网站| 久久久精品在线观看| 欧美日韩综合视频| 久久久国产91| 成人免费在线视频网站| 国产日韩欧美成人| 色综合伊人色综合网| 国产成+人+综合+亚洲欧美丁香花| 亚洲欧美精品suv| 亚洲色图av在线| 国产日韩欧美成人| 最近2019中文字幕大全第二页| 成人www视频在线观看| 国产精品视频男人的天堂| 精品久久久久人成| 亚洲欧美中文字幕| 福利一区视频在线观看| 日韩av电影在线免费播放| 国产最新精品视频| 亚洲欧美国产高清va在线播| 国内精品小视频| 色播久久人人爽人人爽人人片视av| 青草成人免费视频| 91亚洲精品在线| 91av福利视频| 18一19gay欧美视频网站| 亚洲**2019国产| 欧美激情第三页| 成人国内精品久久久久一区| 日韩精品免费在线| 国产精品亚洲自拍| 欧美亚洲在线播放| 亚洲欧洲视频在线| 热久久视久久精品18亚洲精品| 色黄久久久久久| 欧美激情国产精品| 日本久久久久亚洲中字幕| 欧美日韩国产影院| 欧美日韩在线视频一区| 日本成人精品在线| 韩国三级日本三级少妇99| 久久亚洲国产成人| 97精品国产91久久久久久| 亚洲自拍高清视频网站| 久久精品国产亚洲一区二区| 久久精品国产亚洲7777| 色综合伊人色综合网站| 久久久久久国产精品三级玉女聊斋| 97精品欧美一区二区三区| 国产日韩在线看片| 欧美床上激情在线观看| 国产精品免费一区| 国产视频999| 色哟哟亚洲精品一区二区| 国产自摸综合网| 最近中文字幕mv在线一区二区三区四区| 久久亚洲精品网站| 国产精品久久久久久久av电影| 精品国产一区二区三区久久| 庆余年2免费日韩剧观看大牛| 亚洲美女av黄| 欧美另类极品videosbestfree| 久久伊人精品一区二区三区| 亚洲精品美女免费| 九九精品视频在线| 久久久免费在线观看| 欧美xxxx14xxxxx性爽| 欧美激情网友自拍| 亚洲欧洲黄色网| 亚洲深夜福利网站| 国产成人鲁鲁免费视频a| 日韩视频免费在线| 91精品久久久久久久久久久久久| 亚洲高清久久久久久| 国产成人福利网站| 亚洲综合日韩中文字幕v在线| 91国内揄拍国内精品对白| 视频在线观看99| 欧美一区二区视频97| 一区二区欧美久久|