class Observer
{
private function Observer(){}
public function Update():Void{};
}
class Subject
{
private var observers:Array = new Array();
private function Subject()
{
}
public function Attach(observer:Observer):Void
{
observers.push(observer);
}
public function Detach(observer:Observer):Void
{
observers.shift(observer);
}
public function Notify():Void
{
for (var i=0; i < observers.length; i++)
{
observers[i].Update();
}
}
}
class ConcreteObserver extends Observer
{
private var name:String;
private var observerState:String;
private var subject:ConcreteSubject;
public function ConcreteObserver(sub:ConcreteSubject, n:String)
{
subject = sub;
name = n;
}
public function Update():Void
{
observerState = subject.SubjectState;
trace("Observer " + name + "'s new state is " + observerState);
}
public function get Subject():ConcreteSubject
{
return subject;
}
public function set Subject(value:ConcreteSubject):Void
{
subject = value;
}
}
class ConcreteSubject extends Subject
{
private var subjectState:String;
public function get SubjectState():String
{
return subjectState;
}
public function set SubjectState(value:String):Void
{
subjectState=value;
}
}
var s:ConcreteSubject = new ConcreteSubject();
s.Attach(new ConcreteObserver(s, "X"));
s.Attach(new ConcreteObserver(s, "Y"));
s.Attach(new ConcreteObserver(s, "Z"));
s.SubjectState = "ABC";
s.Notify();
这个模式太重要了,MVC经常用到! 一般是监视View的动作,通过Control改变Model.