观察者模式:
<?php
require_once("guanchazhe.php");
class BorderDecorator extends Widget{
private $widget;
function __construct(Widget $widget){
$this->widget=$widget;
}
public function draw(){
echo "<table border=0 cellpadding=1 bgcolor=#3366ff>";
echo "<tr bgcolor=#ffffff><td>";
$this->widget->draw();
echo "</td></tr></table>";
}
public function update(Observable $subject){
$this->widget->update($subject);
}
}
$widgetA=new BorderDecorator($widget);
$widgetA->draw();
?>
widget类的改写:
//观察者
interface Observer{
public function update(Observable $subject);
}
abstract class Widget implements Observer{
private $subject;
abstract public function draw();
public function update(Observable $subject){
$this->subject=$subject;
}
public function getSubject(){
return $this->subject;
}
}
class BasicWidget extends Widget{
function __construct(){
}
public function draw(){
$html="<table border=1 width=130>";
$html.="<tr><td colspan=3 bgcolor=#cccccc>" .
"<b>Instrument Info<b></td></tr>";
$data=$this->getSubject()->getData();
$numRecords=count($data[0]);
for($i=0;$i<$numRecords;$i++){
$instms=$data[0];
$prices=$data[1];
$years=$data[2];
$html.="<tr><td>$instms[$i]</td><td>$prices[$i]</td><td>$years[$i]</td></tr>";
}
$html.="</table><br>";
echo $html;
}
}