public interface Subject {
//注册观察者对象o
public void attach(Observer o);
//删除观察者对象o
public void detach(Observer o);
//通知观察者
public void notifyObserver();
}public interface Observer {
//接收到通知的操作
public void update();
}import java.util.LinkedList;
import java.util.List;
public class ConcreteSubject implements Subject {
//用于保存自己的注册对象
private List<Observer> observerList = new LinkedList<Observer>(); //方便经常的插入和删除操作
/**
* 注册一个观察者
*/
@Override
public void attach(Observer o) {
// TODO Auto-generated method stub
observerList.add(o);
}
/**
* 取消一个观察者
*/
@Override
public void detach(Observer o) {
// TODO Auto-generated method stub
observerList.remove(o);
}
/**
* 通知观察者
*/
@Override
public void notifyObserver() {
// TODO Auto-generated method stub
for(Observer obs : observerList ) {
obs.update(); //逐个通知观察者
}
}
}
public class ConcreteObserver implements Observer {
/**
* 接到通知的逻辑
*/
@Override
public void update() {
// TODO Auto-generated method stub
}
}public interface PublicOffcial {
//注册订阅消息的用户
public void attach(WechatUser user);
//取消订阅消息的用户
public void detach(WechatUser user);
//向用户发送订阅
public void notifyObserver(String news);
}public interface WechatUser {
public void readNews(String news);
}import java.util.LinkedList;
import java.util.List;
public class PublicOffcialXXNewPaper implements PublicOffcial {
//已订阅用户的列表
private List< WechatUser> list = new LinkedList<WechatUser>();
/**
* 当用户订阅时,加入列表
*/
@Override
public void attach(WechatUser user) {
if( ! list.contains(user))
list.add(user);
}
/**
* 用户取消订阅时,从列表清除
*/
@Override
public void detach(WechatUser user) {
if(list.contains(user))
list.remove(user);
}
/**
* 通知订阅者
*/
@Override
public void notifyObserver(String news) {
for(WechatUser user : list ) {
user.readNews(news);
}
}
/**
* 报社某天的发布新闻工作,包括发送给微信订阅者,可能还要更新网站
* @param news
*/
public void ReleaseNews(String news) {
//something to do e.g: update website..
System.out.println("报社发布今日新闻【" + news + "】");
notifyObserver(news);
}
}
public class NewsPaperFan implements WechatUser {
private String name;
public NewsPaperFan(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
@Override
public void readNews(String news) {
System.out.println("用户: " + name + "收到订阅的新闻【" + news + "】");
}
}public class Client {
public static void main(String[] args) {
PublicOffcialXXNewPaper newPaper = new PublicOffcialXXNewPaper();
WechatUser user1 = new NewsPaperFan("Tony");
WechatUser user2 = new NewsPaperFan("Jack");
WechatUser user3 = new NewsPaperFan("David");
newPaper.attach(user1);
newPaper.attach(user2);
newPaper.attach(user3);
newPaper.ReleaseNews("苹果即将推出IPhone6...");
}
}
报社发布今日新闻【苹果即将推出IPhone6...】 用户: Tony收到订阅的新闻【苹果即将推出IPhone6...】 用户: Jack收到订阅的新闻【苹果即将推出IPhone6...】 用户: David收到订阅的新闻【苹果即将推出IPhone6...】
原文:http://blog.csdn.net/diaorenxiang/article/details/39061915