实例
//java实现观察者模式编程 import java.util.HashSet; public class ObserverPattern { public static void main(String[] args) { // TODO Auto-generated method stub Product p = new Product("java<java核心技术>", 103.00); //创建一个商品 Observer o1 = new WebObserver(); //第一个观察者 Observer o2 = new MailObserver(); //第二个观察者 p.addObserver(o1); //注册观察者1 p.addObserver(o2); //注册观察者1 System.out.println("===第一次价格改动==="); p.setPrice(80); //修改商品价格 o1.unreg(p); //观察者1取消观察 System.out.println("===第二次价格改动==="); p.setPrice(100); //再次修改商品价格 } } interface Observer{ //观察者接口 public void update(Product p); //价格修改的接口方法 public void unreg(Product p); //撤销注册 } class WebObserver implements Observer{ //Web观察者 public void update(Product p) { //定义回调方法 System.out.println("更新页面价格:"+p.getName()+":"+p.getPrice()); } public void unreg(Product p) { p.getObservers().remove(this); //去掉本观察者 } } class MailObserver implements Observer{ //E-mail观察者 public void update(Product p) { //定义回调方法 System.out.println("为所有会员发送价格变化信息"+p.getName()+":"+p.getPrice()); } public void unreg(Product p) { p.getObservers().remove(this); //去掉本观察者 } } //产品类 class Product{ //被观察者 private double price; //价格 private String name; //商品名称 private HashSet<Observer> observers; //保存所有的观察者 //构造方法 public Product(String name, double price) { // TODO Auto-generated constructor stub this.name = name; this.price = price; observers = new HashSet<Observer>(); } public void addObserver(Observer ob) { //添加观察者 observers.add(ob); } //通知监听者执行update()方法 public void notifyObserver() { for (Observer ob : observers) { ob.update(this); //回调所有观察者的观察方法 } } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; //当价格被改变的时候就通知观察者 notifyObserver(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public HashSet<Observer> getObservers() { return observers; } public void setObservers(HashSet<Observer> observers) { this.observers = observers; } }
运行实例 »
点击 "运行实例" 按钮查看在线实例