zoukankan      html  css  js  c++  java
  • PHP 组件注册的例子

      1 <?php
      2 namespace  Test;
      3 
      4 abstract class Plugin
      5 {
      6     protected $pluginName = null;
      7 
      8     abstract public function action();
      9 
     10     function toString()
     11     {
     12         return $this->pluginName;
     13     }
     14 }
     15 
     16 class HandPlugin extends Plugin
     17 {
     18     protected $pluginName ;
     19 
     20     function __construct($name = 'Hand')
     21     {
     22         $this->pluginName = $name;
     23     }
     24 
     25     public function action()
     26     {
     27         // TODO: Implement action() method.
     28         echo 'Raise your hand!' ."
    ";
     29     }
     30 }
     31 
     32 class FootPlugin extends Plugin
     33 {
     34     protected $pluginName ;
     35 
     36     function __construct($name = 'Foot')
     37     {
     38         $this->pluginName = $name;
     39     }
     40 
     41     public function action()
     42     {
     43         // TODO: Implement action() method.
     44         echo 'Put down your foot!' ."
    ";
     45     }
     46 }
     47 
     48 
     49 class People
     50 {
     51     protected $bodyPlugin = array();
     52     protected $giveName = null;
     53 
     54     public function __construct($name ='Fully Man')
     55     {
     56         $this->giveName = $name;
     57     }
     58 
     59     public function register(Plugin $plugin)
     60     {
     61         if(!isset($this->bodyPlugin[$plugin->toString()]))
     62         {
     63             $this->bodyPlugin[$plugin->toString()] = $plugin;
     64         }
     65         else
     66         {
     67             return true;
     68         }
     69     }
     70 
     71     public function unRegister(Plugin $plugin)
     72     {
     73         if(isset($this->bodyPlugin[$plugin->toString()]))
     74         {
     75             unset($this->bodyPlugin[$plugin->toString()]);
     76         }
     77         return true;
     78     }
     79 
     80     public function doBodyAction()
     81     {
     82         if(empty($this->bodyPlugin))
     83         {
     84             echo 'Nothing to show!' ."
    ";
     85             return false;
     86         }
     87 
     88         echo $this->giveName. " will do :
    ";
     89         foreach($this->bodyPlugin as $name => $plugin)
     90         {
     91             echo $name. ": " ;
     92             echo $plugin->action();
     93         }
     94     }
     95 }
     96 
     97 $handPlugin = new HandPlugin();
     98 $footPlugin = new FootPlugin();
     99 $people = new People();
    100 
    101 $people->register($handPlugin);
    102 $people->register($footPlugin);
    103 
    104 $people->doBodyAction();
    学习记录,方便复习
  • 相关阅读:
    POJ 1611 The Suspects(并查集)
    POJ 2485 Highways(最小生成树Prim算法)
    POJ 1062 昂贵的聘礼(最短路径Dijkstr的变形)
    SDUT 2374 || HDU 1803Cylinder(计算几何求体积)
    HDU 1804 || SDUT 2375 Deli Deli(简单题)
    POJ 3041 Asteroids(二分图的最大匹配)
    HDU 1802 || SDUT 2373 Black and white painting(规律)
    POJ 1035 Spell checker(字符串简单匹配)
    POJ 3080 Blue Jeans(KMP模式匹配)
    js中反斜杠\的一些研究
  • 原文地址:https://www.cnblogs.com/jingjingdidunhe/p/6435541.html
Copyright © 2011-2022 走看看