您的位置:首页 > 其它

设计模式之观察者模式 简单易懂的小例子

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);

}

}

运行结果:
名字变了,你可以执行其他操作了

价格变化了,你可以执行其他操作了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: