zoukankan      html  css  js  c++  java
  • 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接口,并不需要观察者具体的类是谁,做了什么或者其他细节.

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

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

  • 相关阅读:
    位运算的应用
    MySql的自增主键以及TEXT数据类型使用
    MaxDos启动盘拆解
    QT预备式(包含MySql配置)未完成……
    关于Services.exe开机CPU内存使用暴增解决方案
    Windows Upnp 服务补丁——UpnpFix V1.0
    Memory Ordering
    "FoxitReaderOCX.ocx failed to load" 问题解决方案
    LameDropXPd V2.0 (L.A.M.E 3.97) 完美汉化版
    编译QT的MySql驱动问题及解决方案
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11069853.html
Copyright © 2011-2022 走看看