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

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

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

  • 相关阅读:
    Python编码和文件操作
    Python的list和tuple及dictionary
    Python代码对比
    python的基础知识
    day2 springcloud组件(nacos注册/配置中心 feign组件请求调用 gateway网关)
    springcloud与springboot版本对应关系
    git配置
    day1 分布式基础概念
    spring中的依赖注入(DI)笔记
    20210223 爱生气的书店老板(滑动窗口)
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11069853.html
Copyright © 2011-2022 走看看