观察者模式

来源:互联网 发布:可以看电视的软件 编辑:程序博客网 时间:2024/06/10 06:52
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);}/** * 变动通知调用方法 */@Overridepublic void update(Object object) {double price = (double)object;System.out.println(name+"收到通知:商品新价格为"+price);}}

0 0