设计者模式属于行为模式,其意图是定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并自动更新。下面通过例子来说明这一模式。
首先是高层的观察者接口
IObserver.java
public interface IObserver{
//更新方法,参数为主题对象和更新参数
void update(Subject subject,Object args);
}
一个具体的观察者:
Customer.java
public class Customer implements IObserver{
@Override
public void update(Subject subject,Object args){
System.out.println("Customer 获得了新消息 ["+args+"]");
}
}
另一个具体的观察者:
TV.java
public class implements IObserver{
@Override
public void update(Subject subject,Object args){
System.out.println("TV 获得了新消息 ["+args+"]");
}
}
主题抽象类:
Subject.java
public abstract class Subject{
private Vector<IObserver> observers;
public Subject(){
observers=new Vector<IObserver>();
}
public synchronized void addObserver(IObserver observer){
observers.add(observer);
}
public synchronized void removeObserver(IObserver observer){
observers.remove(observer);
}
public synchronized void removeObservers(){
observers.clear();
}
public synchronized void notifyObservers(Object args){
for(IObserver observer:observers){
observer.update(this,args);
}
}
}
一个具体的主题:新闻发布者
NewsPublisher.java
public class NewsPublisher extends Subject{
private String news;
public void setNews(String news){
if(news!=null&&!news.equals(this.news)){
this.news=news;
this.notifyObservers(news);
}
}
}
客户端代码
Client.java
public class Client{
public static void main(String[] args){
NewsPublisher newsPublisher=new NewsPublisher();
newsPublisher.addObserver(new Customer());
newsPublisher.removeObserver(new TV());
newsPublisher.setNews("空调大降价");
}
}
运行结果如下:
Customer获得了新消息[空调大降价]
TV 获得了新消息[空调大降价]
(end)
转载于:https://blog.51cto.com/secondscript/1605795