zoukankan      html  css  js  c++  java
  • 观察者模式

       设计模式之观察者模式

       观察者模式的使用地方是当某一个类发生改变时,通知所有观察者发生改变。在监听中大量存在,下面代码用java实现。

    package com.voole.test;
    
    public interface IObserable {
    	/* @declaretion: 定义被观察者的接口
    	 * @author: yzj
    	 * @Description:添加,删除观察者,求观察者数量,并及时通知观察者*/
    	//添加
    	void addObservers(IObserver observer);
    	//删除
    	void deleteObservers(IObserver observer);
    	//返回注册观察者数量
    	int getObserversCount();
    	//通知所有观察者
    	void notifyObservers();
    }
    
    
    package com.voole.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /* @declaretion:被观察者对象
     * @author: yzj
     * @Description:添加,删除观察者,求观察者数量,并及时通知观察者*/
    public class ConcreteObservable implements  IObserable {
    	//定义观察者对象
    	private List<IObserver> observers = new ArrayList<IObserver>();
    	//添加
    	public void addObservers(IObserver observer){
    		observers.add(observer);
    	}
    	
    	//删除对象
    	public void deleteObservers(IObserver observer){
    		observers.remove(observer);
    	}
    	
    	//返回当前注册对象
    	public int getObserversCount(){
    		return observers.size();
    	}
    	
    	//通知所有观察者发生改变
    	public void notifyObservers(){
    		for(IObserver observer:observers){
    			observer.update(this);
    		}
    	}
    }
    
    
    package com.voole.test;
    
    public interface IObserver {
    	void update(ConcreteObservable o);
    }
    
    package com.voole.test;
    
    public class ConcreteObserver implements IObserver{
    
    	@Override
    	public void update(ConcreteObservable o) {
    		//此处做更新处理
    	}
    
    }
    

      此处的为拉伸式的观察者模式,还有就是推送式的观察者模式,主要的区别就是是否把Observable作为参数传递给Observer,若是,则是拉伸式。

  • 相关阅读:
    luogu1060开心的金明
    luogu1048采药
    uva1025城市里的间谍
    scoi刷题记录(2019/04/07)
    差分及树上差分的正确食用姿势(2019/2/21学习笔记)
    图论技巧(2019/1/28之一)
    考试反思(2019/1/26学习笔记)
    考试反思(2019/1/22)
    「一本通 5.2 例 5」皇宫看守
    「一本通 5.2 例 3」数字转换
  • 原文地址:https://www.cnblogs.com/yzjT-mac/p/5960461.html
Copyright © 2011-2022 走看看