设计模型之观察者模型(二)

    利用java自带的接口来实现观察者模式
  1.目标类的定义:
package com.jxufe.jdk.observer;

import java.util.Observable;
/**
 * 这是一个具体的目标对象
* @author jack
* @version 创建时间:2016年4月21日 上午10:42:08
*
 */
public class ConcreteSubject extends Observable {
	
        private String information;//目标对象需要更新的内容

		public String getInformation() {
			return information;
		}

		public void setInformation(String information) {
			this.information = information;
			/**
			 * 标记此 Observable 对象为已改变的对象;
			 * 现在 hasChanged 方法将返回 true。
			 */
			this.setChanged();
			/**
			 * 这个方法是使用推模式实现的,通知其所有观察者
			 * 并调用 clearChanged 方法来指示此对象不再改变。
			 */
			this.notifyObservers(information);
			/**
			 * 拉模式是把整个目标对象推送个观察者对象的
			 * this.notifyObservers();
			 */
		}
          
        
}


2.观察者类的定义:
package com.jxufe.jdk.observer;

import java.util.Observable;
import java.util.Observer;

public class ConcreteObserver implements Observer {
	
	private String observeName;
    /**
     * 第一个参数是使用拉模型来调用的
     * 第二个参数是使用推模型来调用的
     */
	public void update(Observable arg0, Object arg1) {
           System.out.println("推模型:"+observeName + (String)arg1);
           System.out.println("拉模型:"+observeName + ((ConcreteSubject)arg0).getInformation());
	}
	public String getObserveName() {
		return observeName;
	}
	public void setObserveName(String observeName) {
		this.observeName = observeName;
	}

}

3.结果:
package com.jxufe.jdk.observer;

import java.util.Observable;



/**
 * 用来演示观察者模式
* @author 曾志鹏
* @version 创建时间:2016年4月21日 上午10:56:09
*
 */
public class MainDemo {
	public static void main(String[] args) {
		 Observable concreteSubject1 = new ConcreteSubject();
		 
		 ConcreteObserver observer1 = new ConcreteObserver();
		  ConcreteObserver observer2 = new ConcreteObserver();
		 observer1.setObserveName("张三");
		 observer2.setObserveName("张四");
		  concreteSubject1.addObserver(observer2);
		  concreteSubject1.addObserver(observer1);
		  
		  ((ConcreteSubject) concreteSubject1).setInformation("你好");
	}
   
   
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值