观察者模式

 

观察者模式(有时又被称为发布/订阅模式)是软体设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。

 

package org.fanzone.pattern.observer;

 

/** 

 * Title: base<br> 

 * Description: Observer Criterion<br> 

 * Copyright: Copyright (c) 2011 <br> 

 * Create DateTime: Jul 4, 2011 10:16:05 AM <br> 

 * @author wangmeng

 */

public interface IObserver {

 

void receive(String message);

}


-------------------------------------------------------------------------------

package org.mars.pattern.observer;

/** 
 * Title: base<br> 
 * Description: Observer<br> 
 * Copyright: Copyright (c) 2011 <br> 
 * Create DateTime: Jul 4, 2011 10:17:47 AM <br> 
 * @author wangmeng
 */
public class Observer implements IObserver{

public void receive(String message) {
System.out.println(this.hashCode()+": I'v got it.");
}

}

-------------------------------------------------------------------------------

package org.mars.pattern.observer;

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

/** 
 * Title: base<br> 
 * Description: Subject<br> 
 * Copyright: Copyright (c) 2011 <br> 
 * Create DateTime: Jul 4, 2011 10:19:17 AM <br> 
 * @author wangmeng
 */
public class Subject {

private List<Object> observers;
/**
* Initial the container filled with observers. 
*/
public Subject(){
observers = new ArrayList<Object>();
}
/**
* Register observer.
* @param observer
*/
public void register(IObserver observer){
if(!observers.contains(observer)){
observers.add(observer);
}
}
/**
* Unregister observer.
* @param observer
*/
public void unRegister(IObserver observer){
if(observers.contains(observer)){
observers.remove(observer);
}
}
/**
* Just broadcast message to every registered member.
* @param message
*/
public void notify(String message){
System.out.println(this.hashCode() + ": " + message);
for(Object object : observers){
IObserver observer = (IObserver)object;
observer.receive(message);
}
}
}

---------------------------------------------------------------------------------------

package org.mars.pattern.observer;

public class Commission {
public static void main(String[] args){
Subject subject = new Subject();
Observer firstObserver = new Observer();
Observer secondObserver = new Observer();
Observer thirdObserver = new Observer();
/** Register observer. */
subject.register(firstObserver);
subject.register(secondObserver);
subject.register(thirdObserver);
/** Notify a message. */
subject.notify("Going to the music party,shall we?");
/**Unregister one observer. */
subject.unRegister(thirdObserver);

/** Notify a message again. */
subject.notify("At tweenty thirty,okay?");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值