zoukankan      html  css  js  c++  java
  • 设计模式-----观察者模式(Obsever)

    它定义了对象之间一对多的依赖关系。因此,。当一个对象的状态变化,对吸毒成瘾者,他将收到通知和更新自己主动。


    观察者模式的组成:


    抽象主题角色:把全部对观察者对象的引用保存在一个集合中。抽象主题提供一个接口。能够添加和删除观察者角色。



    详细主题角色:在详细主题内部状态改变时,给全部登记过的观察者发出通知。


    抽象观察者角色为全部详细的观察者定义一个接口,在得到主题的通知时更新自己

    详细观察者角色:该角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。


    观察者模式UML图:


    观察者模式演示样例代码:

    主题接口类 Subject.java

    public interface Subject {
    	public void addObserver(Observer observer);
    
    	public void removeObserver(Observer observer);
    
    	public void notifyObservers(String str);
    }
    

    详细主题类(能够实现多个) ConcreteSubject.java

    import java.util.ArrayList;
    
    public class ConcreteSubject implements Subject {
    	ArrayList<Observer> observers = new ArrayList<Observer>();
    
    	public void addObserver(Observer observer) {
    		observers.add(observer);
    	}
    
    	public void removeObserver(Observer observer) {
    		observers.remove(observer);
    	}
    
    	@Override
    	public void notifyObservers(String str) {
    		//通知全部观察者
    		for (Observer o : observers) {
    			o.update(str);
    		}
    	}
    }
    


    观察者接口类 Observer.java

    public interface Observer {
    	public void update(String str);
    }


    详细观察者类(能够实现多个)ConcreteObserver.java

    public class ConcreteObserver implements Observer {
    
    	@Override
    	public void update(String str) {
    		System.out.println("通知了observer--》 " + str);
    	}
    }

    測试类 Test.java

    /**
     * 測试观察者模式
     * 
     * @author neng
     * 
     */
    public class Test {
    
    	public static void main(String[] args) {
    		// 仅仅要是实现接口的观察者与主题就可以. 多对多
    		ConcreteObserver observer1 = new ConcreteObserver();
    		ConcreteObserver observer2 = new ConcreteObserver();
    
    		ConcreteSubject concreteSubject1 = new ConcreteSubject();
    
    		concreteSubject1.addObserver(observer1);
    		concreteSubject1.addObserver(observer2);
    		concreteSubject1.notifyObservers("这个是消息!

    !!

    。"); concreteSubject1.removeObserver(observer2); concreteSubject1.notifyObservers("命令!

    。"); } }


    观察者模式用途:

    Android。ios中的Notification即用观察者模式实现。


    Java中的事件监听也用观察者模式实现。

    多个对象(一对多,多对多)之间通讯能够用观察者模式,主题和观察者之间的耦合度非常低,可拓展性非常强!


    转载请注明出处:http://blog.csdn.net/xn4545945  



    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    hdoj 2803 The MAX【简单规律题】
    hdoj 2579 Dating with girls(2)【三重数组标记去重】
    hdoj 1495 非常可乐【bfs隐式图】
    poj 1149 PIGS【最大流经典建图】
    poj 3281 Dining【拆点网络流】
    hdoj 3572 Task Schedule【建立超级源点超级汇点】
    hdoj 1532 Drainage Ditches【最大流模板题】
    poj 1459 Power Network【建立超级源点,超级汇点】
    hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】
    hdoj 1012 u Calculate e
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4850849.html
Copyright © 2011-2022 走看看