您的位置:首页 > 编程语言 > Java开发

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: