设计模式之观察者模式(一)

     观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)。目标对象与观察者对象是一对多的关系。并却是单行依赖的关系。只有观察者依赖目标对象而目标对象不依赖观察者对象。目标对象是主动的而观察者对象是被动的。目标的状态发生变化时,所有依赖于它的观察者对象都得到通知并自动刷新。

   观察者模型:

          

  根据用代码实现通用的模板:

      1.目标类的建立:

         

package com.jxufe.module.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * 目标对象,对观察者进行添加(注册)删除等操作
* @author jack
* @version 创建时间:2016年4月20日 下午12:44:16
*
 */
public class Subject {
   /**
    * 用来保存观察者
    */
 	private List<Observer> observers = new ArrayList<Observer>();
 	/**
 	 * 添加一个观察者
 	 *@param observer 具体的一个观察者
 	 */
 	public void attach(Observer observer){
 		observers.add(observer);
 	}
 	/**
 	 * 删除一个观察者
 	 *@param observer具体的一个观察者
 	 */
 	public void detach(Observer observer){
 		observers.remove(observer);
 	}
 	/**
 	 * 更新观察者的信息
 	 */
 	public void notifyObserver(){
 		for(Observer observer:observers){
 			observer.update(this);
 		}
 	}
	
}


2.具体的目标类:

package com.jxufe.module.observer;
/**
 * 具体的目标对象
* @author jack
* @version 创建时间:2016年4月20日 下午12:48:07
*
 */
public class ConcreteSubject extends Subject{
       private String subjectInformation;//目标对象要更新的信息

	public String getSubjectInformation() {
		return subjectInformation;
	}
     /**
      * 更改信息并通知所有的观察者
      *@param subjectInformation
      */
	public void setSubjectInformation(String subjectInformation) {
		this.subjectInformation = subjectInformation;
		this.notifyObserver();
	}

	
       
}

3.观察者类:

package com.jxufe.module.observer;
/**
 * 观察者的通用接口用来更新观察者信息
* @author jack
* @version 创建时间:2016年4月20日 下午12:49:56
*
 */
public interface Observer {
      public void update(Subject subject);
}

4.具体的观察者类:

package com.jxufe.module.observer;
/**
 * 具体的观察者
* @author 曾志鹏
* @version 创建时间:2016年4月20日 下午12:51:19
*
 */
public class ConcreteObserver implements Observer {
	//观察者的信息
      private String observerInformation;
      

      /**
       * 获取目标对象的最新的信息
       */
	public void update(Subject subject) {
		
		observerInformation =((ConcreteSubject) subject).getSubjectInformation();
		
	}


	public String getObserverInformation() {
		return observerInformation;
	}


	public void setObserverInformation(String observerInformation) {
		this.observerInformation = observerInformation;
	}

	

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值