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  



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

  • 相关阅读:
    numpy、torch:[ ]里传函数,数组过滤
    torch:torch.sort
    torch : transpose,transpose_
    托管堆和垃圾回收笔记
    UdpClient类客户端和服务端demo
    JavaScript阻止事件冒泡
    单元测试初接触
    CSS选择器
    文档onload处理程序
    TASKKILL命令使用方法
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4850849.html
Copyright © 2011-2022 走看看