观察者模式
来源:互联网 发布:中美网络马云百度 编辑:程序博客网 时间:2024/06/07 12:12
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
{
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
{
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 秒)
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 如何理解游戏运营——三部曲
- 核心动画
- WindowsError: [Error 32]问题的解决
- PL\SQL使用小技巧
- 友元函数 友元类
- 观察者模式
- SQL语句快速介绍
- 如果类是个泛型类的话dllImport 代码不能编译
- s3c2410触摸屏驱动(2.6内核)分析
- java.lang.IllegalArgumentException: The observer is null.异常解决方案
- Jquery 给列表框select赋值和获选中值
- WCF 入门
- 字符串的操作方法
- matlab基础之128点fft分析数据,各个数据的频谱整体分析