设计模式之-观察者模式

一、观察者模式

       JAVA设计模式有23种,平时工作中也使用了一些,比如单例,模板,策略,建造者等,但最近在学习zk过程中,发现zk提供的发布订阅功能和设计模式里面的观察者模式原理差不多,故顺便了解观察者模式是如何实现的,整体来说比较简单,一个被观察者,N个观察者,当被观察者的行为发生改变的时候,观察者能够监听到这个变化,从而做出相应的行为处理。


二、代码实现

    这里我们模拟实现一个这样的场景,上级公司领导来视察,分子公司要通知各个部门做好相关的接待工作,比如领导来了后,保安室做好安保工作,前台做好接待工作,业务部门做好业务交流工作等。

     被观察者抽象类

   

import java.util.ArrayList;
import java.util.List;

public abstract class Subject被观察者 {
	
	public List<Observer> list = new ArrayList<Observer>();

/**添加观察者 */
	public void addObserver(Observer observer) {
		this.list.add(observer);
	}
	
/** 删除观察者*/
	public void deleteObserver(Observer observer) {
		this.list.remove(observer);
	}
/** 通知观察者 */
        public void notifyAllObserver() {
		for(final Observer obs : list) {
			obs.doSomething();
		}
	}
	
	public abstract void doSomething();
	
}

      观察者接口

  

public interface Observer {

	void doSomething();
}

     被观察者实现类

  

public class Leader extends Subject被观察者 {

	@Override
	public void doSomething() {
		System.out.println("领导已经到达公司门口,请各部门做好相关准备!");
		this.notifyAllObserver();
	}

}

      当被观察者发生行为变化的时候,就要通知各个观察者

      第一个观察者:保安室观察者

public class 保安室观察者  implements Observer{

	@Override
	public void doSomething() {
		System.out.println("我们是保安室,刚收的通知说领导已经到了,请把车库车位挪一下");
	}

}

     第二个观察者:部门观察者

public class 部门观察者  implements Observer{

	@Override
	public void doSomething() {
		System.out.println("我们是部门观察者,刚收的通知说领导已经到了,请各位做好相关任务工作");
	}

}

    运行如下代码

 

       public static void main(String[] args) {
		Subject被观察者 subject被观察者 = new Leader();
		subject被观察者.addObserver(new 保安室观察者());
		subject被观察者.addObserver(new 部门观察者());
		subject被观察者.doSomething();
	}

   运行后效果如下


领导已经到达公司门口,请各部门做好相关准备!
我们是保安室,刚收的通知说领导已经到了,请把车库车位挪一下
我们是部门观察者,刚收的通知说领导已经到了,请各位做好相关任务工作

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值