观察者模式
来源:互联网 发布:传奇盛世翅膀升级数据 编辑:程序博客网 时间:2024/04/25 02:01
1 观察操作
public interface Observer
...{
void update();
}
...{
void update();
}
2 具体观察者操作
public class ConcreteObserver implements Observer
...{
public void update()
...{
System.out.println("I am notified");
}
}
...{
public void update()
...{
System.out.println("I am notified");
}
}
3 主题抽象
import java.util.Vector;
import java.util.Enumeration;
abstract public class Subject
...{
/** *//**
* @associates <{Observer}>
* @link aggregation
* @supplierCardinality 0..*
*/
private Vector observersVector = new java.util.Vector();
public void attach(Observer observer)
...{
observersVector.addElement(observer);
System.out.println("Attached an observer.");
}
public void detach(Observer observer)
...{
observersVector.removeElement(observer);
}
public void notifyObservers()
...{
java.util.Enumeration enumeration = observers();
while (enumeration.hasMoreElements())
...{
System.out.println("Before notifying");
((Observer)enumeration.nextElement()).update();
}
}
public Enumeration observers()
...{
return ((java.util.Vector) observersVector.clone()).elements();
}
}
import java.util.Enumeration;
abstract public class Subject
...{
/** *//**
* @associates <{Observer}>
* @link aggregation
* @supplierCardinality 0..*
*/
private Vector observersVector = new java.util.Vector();
public void attach(Observer observer)
...{
observersVector.addElement(observer);
System.out.println("Attached an observer.");
}
public void detach(Observer observer)
...{
observersVector.removeElement(observer);
}
public void notifyObservers()
...{
java.util.Enumeration enumeration = observers();
while (enumeration.hasMoreElements())
...{
System.out.println("Before notifying");
((Observer)enumeration.nextElement()).update();
}
}
public Enumeration observers()
...{
return ((java.util.Vector) observersVector.clone()).elements();
}
}
4 具体主题操作
public class ConcreteSubject extends Subject
...{
private String state;
public void change(String newState)
...{
state = newState;
this.notifyObservers();
}
...{
private String state;
public void change(String newState)
...{
state = newState;
this.notifyObservers();
}
5 客户端实现,主题改变通知后各具体观察者进行更新。
public class Client
...{
private static ConcreteSubject subject;
private static Observer observer;
private static Observer ob;
public static void main(String[] args)
...{
subject = new ConcreteSubject();
observer = new ConcreteObserver();
ob = new ConcreteObserver();
subject.attach(observer);
subject.attach(ob);
subject.change("new state");
}
}
...{
private static ConcreteSubject subject;
private static Observer observer;
private static Observer ob;
public static void main(String[] args)
...{
subject = new ConcreteSubject();
observer = new ConcreteObserver();
ob = new ConcreteObserver();
subject.attach(observer);
subject.attach(ob);
subject.change("new state");
}
}
运行结果:
init:
deps-jar:
Compiling 1 source file to D:/test/desPatten/build/classes
compile-single:
run-single:
Attached an observer.
Attached an observer.
Before notifying
I am notified
Before notifying
I am notified
生成成功(总时间:1 秒)
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 如何修改VC编译后生成的EXE文件的图标
- Apache2 worker MPM
- 死锁
- 勾股数
- 虚拟析构函数:当你可能通过基类指针删除派生类对象时
- 观察者模式
- 指针运算符重载实现前调用及后调用(pre and post function calls)
- c#创建多项目解决方案时遇到解决方案消失的解决办法
- 程序在内存的分配方式
- Control's Invoke problems.
- 使用“组件”优化游戏架构
- 命令模式
- 按要求取文本中的字符
- const char* ; char const *; char* const;