JAVA实现观察者模式
2016-07-24 21:07
423 查看
<span style="font-size:14px;">package com.观察者模式; public interface Observer { public void update(Product p); public void unRegist(Product p); } </span>
<span style="font-size:14px;">package com.观察者模式; public class MailObserver implements Observer{ @Override public void update(Product p) { System.out.println("邮件通知会员价格发生变化:"+p.getName()+p.getPrice()); } @Override public void unRegist(Product p) { p.getObservers().remove(this); } } </span>
<span style="font-size:14px;">package com.观察者模式; public class WebObserver implements Observer { @Override public void update(Product p) { System.out.println("更新页面价格:"+p.getName()+p.getPrice()); } @Override public void unRegist(Product p) { p.getObservers().remove(this); } } </span>
<span style="font-size:14px;">package com.观察者模式; import java.util.HashSet; public class Product { private double price; private String name; private HashSet<Observer> observers; //构造方法 public Product(String name,double price){ 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; } }</span>
<span style="font-size:14px;">package com.观察者模式; public class Main { public static void main(String args[]){ Product p=new Product("《java核心技术》", 103.0); Observer ob1=new WebObserver(); Observer ob2=new MailObserver(); p.addObserver(ob1); p.addObserver(ob2); System.out.println("***********第一次价格变动***********"); p.setPrice(80); ob1.unRegist(p); System.out.println("***********第二次价格变动***********"); p.setPrice(60); } } </span>
相关文章推荐
- Struts2数据传输的背后机制
- java多线程--condition条件
- Java 读取配置文件中的信息 中文乱码
- JavaServlet实现文件上传
- Java虚拟机知识整理——类加载的过程
- java学习之路 之 基本语法-程序流程控制-循环结构-嵌套循环练习题
- 深入理解Spring4框架(二)——容器
- java学习之路 之 基本语法-程序流程控制-循环结构-for 循环练习题
- myeclipse关联weblogic时提示 D:\program\weblogic is not a valid BEA WebLogic Server v10.x installation directory
- SpringMVC处理请求流程(转载)
- 【java基础】JAVA常用正则表达式
- JAVA实现单例模式
- Java 不用数组打印杨辉三角
- 坦克大战_我方坦克发射子弹
- Java Exchange企业邮件服务器 发Email
- Java方法的值传递机制
- eclipse添加安卓源码
- JavaSE学习笔记之-----数组
- Java---设计模式(单例变形)多例
- Struts1.3——DispatchAction、DynamicForm和全局跳转