《PHP設(shè)計(jì)模式介紹》第十二章 裝飾器模式(5)_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

      推薦:《PHP設(shè)計(jì)模式介紹》第十一章 代理模式
      因?yàn)槟硞(gè)對(duì)象消耗太多資源,而且你的代碼并不是每個(gè)邏輯路徑都需要此對(duì)象, 你曾有過(guò)延遲創(chuàng)建對(duì)象的想法嗎 ( if和else就是不同的兩條邏輯路徑) ? 你有想過(guò)限制訪(fǎng)問(wèn)某個(gè)對(duì)象,也就是說(shuō),提供一組方法

      //代碼

      class FormHandler {
      // ...
      function validate(&$form, &$post) {
      $valid = true;
      // first name required
      if (!strlen($post->get(‘fname’))) {
      $form[0] =& new Invalid($form[0]);
      $valid = false;
      }
      // last name required
      if (!strlen($post->get(‘lname’))) {
      $form[1] =& new Invalid($form[1]);
      $valid = false;}
      // email has to look real
      if (!preg_match(‘~\w @(\w \.) \w ~’
      ,$post->get(‘email’))) {
      $form[2] =& new Invalid($form[2]);
      $valid = false;
      }
      return $valid;
      }
      }


      那些就是所有需要為頁(yè)面添加驗(yàn)證的building blocks 。這里是本游戲(章)結(jié)尾的一個(gè)截圖。以及產(chǎn)生它的頁(yè)面代碼:

      //代碼

      <html>
      <head>
      <title>Decorator Example</title>
      <style type=”text/css”>
      .invalid {color: red; }
      .invalid input { background-color: red; color: yellow; }
      #myform input { position: absolute; left: 110px; width: 250px; font-weight: bold;}
      </style>
      </head>
      <body>
      <form action=”<?php echo $_SERVER[‘PHP_SELF’]; ?>” method=”post”>
      <div id=”myform”>
      <?php error_reporting(E_ALL);
      require_once ‘widgets.inc.php’;
      $post =& Post::autoFill();
      $form = FormHandler::build($post);
      if ($_POST) { FormHandler::validate($form, $post);
      }
      foreach($form as $widget) {
      echo $widget->paint(), “<br>\n”;
      }
      ?>
      </div>
      <input type=”submit” value=”Submit”>
      </form>
      </body>
      </html>


      總結(jié)

      裝飾器模式是對(duì)你產(chǎn)生影響的那些模式中的另一個(gè),當(dāng)你使用他們工作一段時(shí)間以后。裝飾器模式允許你可以簡(jiǎn)單的通過(guò)嚴(yán)格的繼承問(wèn)題。你可以這樣認(rèn)為裝飾器:在運(yùn)行時(shí)可以有效地改變對(duì)象的類(lèi)或者甚至多次—當(dāng)你在你的腳本不同的場(chǎng)合使用這個(gè)類(lèi)。

      也許裝飾器模式最重要的一個(gè)方面是它的超過(guò)繼承的能力。“問(wèn)題”部分展現(xiàn)了一個(gè)使用繼承的子類(lèi)爆炸。基于裝飾器模式的解決方案,UML類(lèi)圖展現(xiàn)了這個(gè)簡(jiǎn)潔靈活的解決方案。

      分享:《PHP設(shè)計(jì)模式介紹》第十章 規(guī)范模式
      在一個(gè)應(yīng)用軟件的成型過(guò)程中,一些意想不到的商業(yè)邏輯到處出現(xiàn)。比如,基于價(jià)格的考慮,這個(gè)任務(wù)必須減少項(xiàng)目;而那個(gè)任務(wù)也因?yàn)殇N(xiāo)售稅而必須選擇合適的比率;而其它的任務(wù)也必須因?yàn)槠渌奶貏e

      共5頁(yè)上一頁(yè)12345下一頁(yè)
      來(lái)源:模板無(wú)憂(yōu)//所屬分類(lèi):PHP教程/更新時(shí)間:2008-08-22
      相關(guān)PHP教程