责任链模式和观察者模式

匿名 (未验证) 提交于 2019-12-03 00:22:01

责任链模式

避免请求发送者与接收者耦合在一起,让多个对象都有可能接受请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

通过下面例子,当办公室失火,会通知仓库的保安,保安会通知整个大楼。

抽象区域:

   public abstract class Zone{ 	   private Zone parentName; 	   private String localName; 	    	   public Zone(String name) { 		   localName = name; 	   }  		public void setParentName(Zone parentName) { 			this.parentName = parentName; 		} 	    	 		public void notifyPare() { 			if(parentName != null) { 				parentName.notifyPare(); 				return; 			} 			 			dosomething(); 		} 		 		abstract void dosomething(); 	       }

具体实现类:

  /**     * 办公室     * @author jiahua     *     */        public class Office extends Zone {  	public Office(String name) { 		super(name); 	}  	@Override 	void dosomething() { 		System.out.println("打开喷洒器喷水"); 		 	} 	       }        /**     * 仓库     * @author jiahua     *     */    public class Warehouse extends Zone {  	public Warehouse(String name) { 		super(name); 	}  	@Override 	void dosomething() { 		System.out.println("呼叫保安"); 		 	} 	       }        /**     * 大楼     * @author jiahua     *     */        public class Building extends Zone {  	public Building(String name) { 		super(name); 	}  	@Override 	void dosomething() { 		System.out.println("大楼警报"); 		 	} 	       }

主类:

							

责任链模式可以减少对象的链接,为对象责任分配增加了灵活性。该模式允许一组类作为一个类来使用,并且在类的组合中,一个类的事件可以发送到另一个类并由其处理。


观察者模式

定义对象间的一种一对多依赖关系,使得每当一个对象改变状态,则其相关依赖对象皆得到通知并被自动更新。

/**  * 观察者接口  * @author jiahua  *  */ interface IListenner { 	public void dosomething(); }
/**  * 通知观察者  * @author jiahua  *  */ class publisher { 	List<IListenner> list = new ArrayList<>(); 	 	public void addListener(IListenner listenner) { 		list.add(listenner); 	} 	 	public void notifyAllListener() { 		for (IListenner iListenner : list) { 			iListenner.dosomething(); 		} 	} }
/**  * 观察者的实现  * @author jiahua  *  */ class listenerOne implements IListenner{  	@Override 	public void dosomething() { 		System.out.println("listenerOne  获得消息"); 	} }  class listenerTwo implements IListenner{  	@Override 	public void dosomething() { 		System.out.println("listenerTwo  获得消息"); 	} }  class listenerThree implements IListenner{  	@Override 	public void dosomething() { 		System.out.println("listenerThree   获得消息"); 	}
   public static void main(String args[]){ 	   publisher publisher = new publisher(); 	    	   publisher.addListener(new listenerOne()); 	   publisher.addListener(new listenerTwo()); 	   publisher.addListener(new listenerThree()); 	    	   publisher.notifyAllListener();    }
观察者模式抽象了被观察者与观察者对象的连接,提供了广播式的对象间通信,并且容易增加新的观察者对象。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!