类图:
java实现
被观察者
public abstract class Observable extends java.util.Observable{
private ArrayList<Observer> observerArrayList = new ArrayList<>();
public void addObserver(Observer observer){
this.observerArrayList.add(observer);
}
public void removeObserver(Observer observer){
this.observerArrayList.remove(observer);
}
public void notifyAllObserver(){
for(Observer o : this.observerArrayList){
o.update("");
}
}
}
业务接口
public interface Iwork {
public void doSomething();
}
具体被观察者
public class Subject extends Observable implements Iwork {
@Override
public void doSomething() {
this.notifyAllObserver();
}
}
观察者接口
public interface Observer {
public void update(Object o);
}
具体观察者
public class ConcreteObserver implements Observer {
@Override
public void update(Object o) {
}
}
php实现
abstract class Observable
{
private $observers;
public function __construct()
{
$this->observers = array();
}
public function addObserver(Observer $o)
{
$this->observers[] = $o;
}
public function removeObserver(Observer $o)
{
$key = array_search($o,$this->observers);
if(false !== $key)
{
unset($this->observers[$key]);
}
}
public function notifyAllObserver()
{
foreach($this->observers as $value)
{
$value->update('update');
}
}
}
interface IWork
{
public function doSomething();
}
class Subject extends Observable implements IWork
{
public function doSomething()
{
$this->notifyAllObserver();
}
}
interface Observer
{
public function update($obj);
}
class ConcreteObserver implements Observer
{
private $str;
public function __construct($strtext)
{
$this->str = $strtext;
}
public function update($obj)
{
echo $this->str;
}
}
$observer = new ConcreteObserver('111111');
$observer1 = new ConcreteObserver('222222');
$subject = new Subject;
$subject->addObserver($observer);
$subject->addObserver($observer1);
$subject->removeObserver($observer);
$subject->notifyAllObserver();