package com.zhjg.pattern.observer;
import java.util.ArrayList;
import java.util.List;
/**
* 被观察者基类:所有的被观察者都应继承此基类
* @author 327084
*
*/
public abstract class Observed {
/**
* 观察者列表
*/
private List<Observer> observers = new ArrayList<Observer>();
/**
* 观察者关注以后添加到观察者列表
* @param observer
*/
public void regist(Observer observer){
observers.add(observer);
}
/**
* 取关之后从观察者列表中移除
* @param observer
*/
public void cancel(Observer observer){
observers.remove(observer);
}
/**
* 变动通知
*/
public void notifyObservers(Object object){
for (Observer observer : observers) {
//这里可以给关注商品的用户发邮件通知
observer.update(object);
}
}
}
package com.zhjg.pattern.observer;
/**
* 观察者接口:所有的观察者都应实现此接口
* @author 327084
*
*/
public interface Observer {
public void update(Object object);
}
package com.zhjg.pattern.observer;
/**
* 商品:降价通知(被观察者)
* @author 327084
*
*/
public class Product extends Observed{
private String id;
private String name;
private double price;
public Product() {
super();
}
public Product(String id, String name, double price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
notifyObservers(price);
}
}
package com.zhjg.pattern.observer;
/**
* 消费者:电商用户(关注商品)是观察者角色
* @author 327084
*
*/
public class Consumer implements Observer{
private String name;
public Consumer() {
super();
}
public Consumer(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 关注商品
* @param observed
*/
public void observe(Observed observed){
observed.regist(this);
}
/**
* 变动通知调用方法
*/
@Override
public void update(Object object) {
double price = (double)object;
System.out.println(name+"收到通知:商品新价格为"+price);
}
}