设计模式——观察者模式
来源:互联网 发布:sql 2000 删除重复数据 编辑:程序博客网 时间:2024/05/17 02:29
观察者模式
观察者模式定义了对象间一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
JDK API 内置了观察者模式,java.util包内包含最基本的Observer接口与Observable类。想要实现观察者模式,只需定义自己的观察者类和被观察者类分别实现Observer接口和继承Observable类即可。
Demo
图书类
import java.util.Observable;public class Book extends Observable { private final String name; private double price; public Book(String name, double price) { this.name = name; this.price = price; } public double getPrice() { return price; } public void setPrice(double price) { if (this.price != price) { this.price = price; priceChanged(); } } private void priceChanged() { System.out.println("《" + name + "》价格调整,调整后价格:" + this.price); setChanged(); notifyObservers(); } public String getName() { return name; }}
顾客类
import java.util.Observable;import java.util.Observer;public class Customer implements Observer { private Book book; private double originPrice; private String name; public Customer(String name) { this.name = name; } @Override public void update(Observable o, Object arg) { if (o instanceof Book) { this.book = (Book) o; if (book.getPrice() < originPrice) { notice(); } } } public void subscribe(Book book) { book.addObserver(this); originPrice = book.getPrice(); System.out.println(name + "订阅《" + book.getName() + "》降价通知服务。"); } public void unSubscribe(Book book) { book.deleteObserver(this); System.out.println(name + "退订《" + book.getName() + "》降价通知服务。"); } private void notice() { System.out.println(name + " 收到通知:《" + book.getName() + "》降价,已降价:" + (originPrice - book.getPrice()) + "元"); }}
测试类
public class ObserverTest { public static void main(String[] args) { Book b1 = new Book("Java编程思想",100); Customer c1 = new Customer("张三"); c1.subscribe(b1); Customer c2 = new Customer("李四"); c2.subscribe(b1); System.out.println(""); b1.setPrice(105); b1.setPrice(98); System.out.println(""); c1.unSubscribe(b1); System.out.println(""); b1.setPrice(86); }}
打印结果
张三订阅《Java编程思想》降价通知服务。李四订阅《Java编程思想》降价通知服务。《Java编程思想》价格调整,调整后价格:105.0《Java编程思想》价格调整,调整后价格:98.0李四 收到通知:《Java编程思想》降价,已降价:2.0元张三 收到通知:《Java编程思想》降价,已降价:2.0元张三退订《Java编程思想》降价通知服务。《Java编程思想》价格调整,调整后价格:86.0李四 收到通知:《Java编程思想》降价,已降价:14.0元
0 0
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者模式
- 设计模式—观察者
- 设计模式——观察者设计模式
- 设计模式——观察者
- 设计模式——观察者
- 设计模式 —— 观察者
- 设计模式——观察者
- 【设计模式】——观察者
- 设计模式——观察者模式
- 每日设计模式——观察者模式
- Python初学者的17个技巧
- iOS网络优化
- 谷哥的小弟学后台(39)——MyBatis输入映射parameterType
- 每个人都需要的中文排版指南
- oracle JDBC 查询 rs.next()总报false
- 设计模式——观察者模式
- 1015 cmp
- iOS组件化思路
- 抽象类和接口的区别
- spring boot全局异常捕捉
- luoguP1379八数码难题
- jQuery实例(ajax通信和动态加载二级菜单)
- leetCode---Increasing Subsequences
- Java学习之路-概要