• Java设计模式--观察者模式


    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 观察者模式
     * @author 15735400536
     *
     */
    public class ObserverPattern {
    	public static void main(String[] args) {
    		//创建一个主题
    		Observer observer = new Observer("工信部");
    		
    		//创建四个订阅者
    		Observable xiaomi = new Observable("小米");
    		Observable hauwei = new Observable("华为");
    		Observable vivo = new Observable("vivo");
    		Observable oppo = new Observable("oppo");
    		
    		observer.addObservable(xiaomi);
    		observer.addObservable(hauwei);
    		observer.addObservable(vivo);
    		observer.addObservable(oppo);
    		
    		observer.sendMsg("明天统一发布新机");
    		
    		observer.removeObservable(hauwei);
    		observer.sendMsg("HuaWei提供5G技术支持");
    	}
    }
    
    /**
     * 观察者
     * @author 15735400536
     *
     */
    class Observer {
    	/**
    	 * 消息
    	 */
    	private String msg;
    	
    	/**
    	 * 名称
    	 */
    	private String name;
    	
    	/**
    	 * 被观察者对象列表
    	 */
    	private List<Observable> list = new ArrayList<Observable>();
    	
    	/**
    	 * 添加被观察者
    	 * @param observable
    	 */
    	public void addObservable(Observable observable) {
    		list.add(observable);
    	}
    	
    	/**
    	 * 移除被观察者
    	 * @param observable
    	 */
    	public void removeObservable(Observable observable) {
    		list.remove(observable);
    	}
    	
    	/**
    	 * 向被观察者发送消息
    	 * @param msg
    	 */
    	public void sendMsg(String msg) {
    		System.out.println(this.name + "发布消息:" + msg);
    		for (Observable observable : list) {
    			observable.receive(msg);
    		}
    	}
    
    	public Observer(String name) {
    		super();
    		this.name = name;
    	}
    	
    }
    
    /**
     * 被观察者
     * @author 15735400536
     *
     */
    class Observable {
    	
    	/**
    	 * 被观察者名称
    	 */
    	private String name;
    	
    	/**
    	 * 接收消息
    	 * @param msg2 
    	 */
    	public void receive(String msg) {
    		System.out.println(this.name + "接收消息: " + msg);
    	}
    
    	public Observable(String name) {
    		super();
    		this.name = name;
    	}
    }
    

      执行效果:

         Java内置观察者模式:

      在java.util包中包含有基本的Observer接口和Observable抽象类.功能上和上述代码类似.不过在使用上,就方便多了,因为许多功能比如说注册,删除,通知观察者的那些功能已经内置好了.

      观察者模式的好处:

      观察者模式提供了一种对象设计,让主题和观察者之间耦合度降得很低,为什么呢?关于观察者的一切,主题只知道观察者实现了Observer接口,并不需要观察者具体的类是谁,做了什么或者其他细节.

      这样的话,由于松耦合,改变主题或者观察者其中一方,并不会影响另一方,只要他们之间的接口仍被遵守,就可以自由地改变它.

      降低对象之间的耦合度,也是面设对象设计的一个很重要的原则.

  • 相关阅读:
    搜索进阶1、八数码(HDU1043)
    D.迷宫2 (BFS+优先队列)
    小H的询问(线段树)
    B.迷宫(BFS)
    【UVA】10935 Throwing cards away I(STL队列)
    【UVA】10391 Compound Words(STL map)
    【UVA】12100 Printer Queue(STL队列&优先队列)
    【UVA】1596 Bug Hunt(模拟)
    【UVA】201 Squares(模拟)
    【UVA】1595 Symmetry(模拟)
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11069853.html
Copyright © 2020-2023  润新知