国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP實現(xiàn)的策略模式示例

2024-05-05 00:07:38
字體:
供稿:網(wǎng)友

本文實例講述了PHP實現(xiàn)的策略模式。分享給大家供大家參考,具體如下:

個人覺得設計模式只有在實際應用中才能夠慢慢的去熟悉,到最后做到心中有模式,事事有模式,哈哈

例如:一個電商首頁,可以根據(jù)登陸用戶的性別不同顯示不同的內(nèi)容,比如廣告和商品類別。

傳統(tǒng)方法:在程序內(nèi)部使用多個if,else進行判斷,這樣很難維護,比如我想要再加入一個人妖用戶!那么我就要在程序中再加入else if判斷,這樣寫出來的程序看起來很亂,而且不易維護。

策略模式:實現(xiàn)的思想是這樣的,創(chuàng)建一個接口,對于每個類別的用戶創(chuàng)建一個類,分別去實現(xiàn)接口中的方法,在首頁進行判斷實例化哪個類。

代碼如下:

接口文件UserStrategy.php

<?php//定義接口,我要展示廣告和類別interface UserStrategy{  //顯示廣告的方法  public function showAd();  //顯示類別的方法  public function showCategory();}?>

男性用戶的具體顯示MaleUserStrategy.php

<?php//強制實現(xiàn)接口中的方法class MaleUserStrategy implements UserStrategy{  //男性用戶登錄后會顯示iphone6s的廣告  public function showAd()  {    echo 'Iphone6s';  }  //會顯示電子產(chǎn)品類別  public function showCategory()  {    echo '電子產(chǎn)品啊';  }}?>

女性用戶的具體顯示FemaleUserStrategy.php

<?phpclass FemaleUserStrategy implements UserStrategy{  public function showAd()  {    echo '2016女裝';  }  public function showCategory()  {    echo '女裝';  }}?>

重點來了,創(chuàng)建首頁文件Strategy.php

<?php//如果我想使用上面那些類的話就需要一個文件一個文件的require,但我們可以使用一種方法來自動加載所需要的文件//首先定義一個基本的文件路徑,因為這些文件我都是放在一個文件夾下的define('BASEDIR', __DIR__);//載入一個自動require文件的文件,這里我寫成Config.phprequire 'Config.php';//PHP提供的spl庫,這我們就把需要的文件都加載進來了//那么spl_autoload_register()是什么意思呢?其實就是,當程序運行碰到了沒有定義的類的時候就會自動執(zhí)行它里面的函數(shù),所以就把文件加載近來了呀!spl_autoload_register('Config::autoload');class Strategy{  //定義一個變量來存儲策略  protected $_strategy;  //定義展示廣告和類別的方法  public function index()  {    echo 'Ad:';    echo $this->_strategy->showAd();    echo '<br/>';    echo 'Category:';    echo $this->_strategy->showCategory();  }  //創(chuàng)建不同的策略  public function setStrategy($strategy)  {    $this->_strategy = $strategy;  }}//實例化對象$strategy = new Strategy();//如果$_GET['female']存在的話就顯示女性用戶的廣告和類別--如果需要添加其它策略的時候只需要在這里加入判斷條件就可以了,當然了還需要創(chuàng)建相應策略的類并且一定要去繼承接口哦if(isset($_GET['female'])){  $people = new FemaleUserStrategy();}else{  $people = new MaleUserStrategy();}//把對象傳入到策略類里$strategy = setStrategy($people);//顯示廣告和類別--因為使用了策略模式,當我們需要新增加一個策略的時候這里就不需要修改了。$strategy->index();?>

自動引入文件Config.php

<?php//這里大家可以看到,我的文件都是大寫開頭的,而且每個文件中只有一個類,并且這個類的名字是和文件名一樣的,其實這是一種框架的規(guī)范,大家有興趣的話可以查找一下,psr-0規(guī)范class Config{  //定義一個自動引入文件的方法  static function autoload($class)  {    //這里拼接我們需要引入文件的路徑    require BASEDIR.'/'.$class.'.php';  }}?>

告誡自己在以后的編程中多去考慮,熟能生巧。

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 洛川县| 三江| 应城市| 固始县| 托克逊县| 遵化市| 万年县| 宁远县| 景德镇市| 兴国县| 桂林市| 麻江县| 睢宁县| 通化市| 博湖县| 航空| 兴安盟| 南丰县| 教育| 萨迦县| 察隅县| 南陵县| 柞水县| 扎赉特旗| 汨罗市| 钟山县| 峨眉山市| 吉隆县| 武夷山市| 城口县| 句容市| 辽宁省| 武冈市| 茌平县| 江城| 西峡县| 平南县| 台江县| 武城县| 昌邑市| 太仓市|