设计模式之观察者模式 简单易懂的小例子
2014-04-14 20:47
288 查看
网上商店中的商品在名称、价格发生变化时,必须自动通知会员,Java的API为我们提供了Observer接口和Observable类来实现所谓观察者模式。
Observable(可观察者)类允许在自身发生改变时,通知其它对象(实现接口Observer,观察者)。
下面是一个可观察者(产品类):
package com.lizhenfa.observe;
import java.util.Observable;
public class Product extends Observable{
private String name;
private float price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
//设置更改状态
setChanged();
////通知观察者
notifyObservers(name);
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
//设置更改状态
setChanged();
////通知观察者
notifyObservers(price);
}
}
下面是名称观察者,监视名称是否发生变化
package com.lizhenfa.observe;
import java.util.Observable;
import java.util.Observer;
public class NameObserver implements Observer{
@Override
public void update(Observable o, Object arg) {
//如果传入的参数是String 类型
if(arg instanceof String){
System.out.println("名字变了,你可以执行其他操作了");
}
}
}
下面是价格观察者,监视价格是否发生变化
package com.lizhenfa.observe;
import java.util.Observable;
import java.util.Observer;
public class PriceObserver implements Observer{
@Override
public void update(Observable o, Object arg) {
//如果传入的参数是float类型
if(arg instanceof Float){
System.out.println("价格变化了,你可以执行其他操作了");
}
}
}
下面是测试类
package com.lizhenfa.observe;
public class TestObserver {
/**
* @param args
*/
public static void main(String[] args) {
//创建一个商品对象(被观察的对象)
Product p = new Product();
//创建一个名字观察者,用来监视名称是否变化
NameObserver nameObserver = new NameObserver();
//创建一个价格观察者,用来监视价格是否发生变化
PriceObserver priceObserver = new PriceObserver();
//注册观察者
p.addObserver(nameObserver);
p.addObserver(priceObserver);
//测试名字发生变化
p.setName("李振发");
//测试价格发生变化
p.setPrice(100);
}
}
运行结果:
名字变了,你可以执行其他操作了
价格变化了,你可以执行其他操作了
Observable(可观察者)类允许在自身发生改变时,通知其它对象(实现接口Observer,观察者)。
下面是一个可观察者(产品类):
package com.lizhenfa.observe;
import java.util.Observable;
public class Product extends Observable{
private String name;
private float price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
//设置更改状态
setChanged();
////通知观察者
notifyObservers(name);
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
//设置更改状态
setChanged();
////通知观察者
notifyObservers(price);
}
}
下面是名称观察者,监视名称是否发生变化
package com.lizhenfa.observe;
import java.util.Observable;
import java.util.Observer;
public class NameObserver implements Observer{
@Override
public void update(Observable o, Object arg) {
//如果传入的参数是String 类型
if(arg instanceof String){
System.out.println("名字变了,你可以执行其他操作了");
}
}
}
下面是价格观察者,监视价格是否发生变化
package com.lizhenfa.observe;
import java.util.Observable;
import java.util.Observer;
public class PriceObserver implements Observer{
@Override
public void update(Observable o, Object arg) {
//如果传入的参数是float类型
if(arg instanceof Float){
System.out.println("价格变化了,你可以执行其他操作了");
}
}
}
下面是测试类
package com.lizhenfa.observe;
public class TestObserver {
/**
* @param args
*/
public static void main(String[] args) {
//创建一个商品对象(被观察的对象)
Product p = new Product();
//创建一个名字观察者,用来监视名称是否变化
NameObserver nameObserver = new NameObserver();
//创建一个价格观察者,用来监视价格是否发生变化
PriceObserver priceObserver = new PriceObserver();
//注册观察者
p.addObserver(nameObserver);
p.addObserver(priceObserver);
//测试名字发生变化
p.setName("李振发");
//测试价格发生变化
p.setPrice(100);
}
}
运行结果:
名字变了,你可以执行其他操作了
价格变化了,你可以执行其他操作了
相关文章推荐
- C#设计模式---观察者模式简单例子
- JAVA设计模式-观察者模式简单例子
- Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子
- C#设计模式---观察者模式简单例子
- Java 观察者模式 简单例子
- 用最简单的例子理解观察者模式(Observer Pattern)
- 设计模式(1)观察者模式简单理解
- 《Head First 设计模式》例子的C++实现(2 观察者模式)
- 设计模式 篇 单子模式 门面模式 适配器 工厂模式 观察者模式 命令者模式 装饰者模式 代理模式 简单讲解
- 一个简单例子的设计模式分析
- 设计模式之六个创建型模式的相关知识,简单易懂。
- 设计模式之七个结构型模式的相关知识,简单易懂。
- [例子向]简单说一下设计模式
- 《Head First 设计模式》例子的C++实现(2 观察者模式)
- 设计模式 篇 单子模式 门面模式 适配器 工厂模式 观察者模式 命令者模式 装饰者模式 代理模式 简单讲解
- 观察者模式简单例子
- 设计模式(观察者)自己写的例子
- 设计模式简单心得之观察者模式
- 关于一个简单的策略设计模式的例子
- 简单易懂23种设计模式