java观察者模式例子

首先我们得知道什么是观察者模式;什么时候会用到它!
观察者模式设计到的角色至少有 观察者和被观察者
使用情景:当一个对象做出一个动作的时候,另一个(另一些)对象会做出响应的动作
最经典的莫过于: 猫叫的时候 老鼠就会跑(这个时候老鼠就是观察者 他一观察猫叫就跑)
我就以猫和老鼠为例子来分析一下自己对java观察者模式的理解!



1.老鼠接口------观察者模式中观察者接口
 
  

package 观察者模式;


public interface Listening {
public void run();
}


2,白鼠----具体的观察者之一
 
  

public class baishu{

public void run(){

System.out.println("mimi,白鼠run");

}

}

4,猫----被观察者(这里也可以进行一层接口进行封装,具体情况而定,不过现在一般情况下是不需要的)

 
  

package 观察者模式;
public class Cat {
public void mimi(){
System.out.println("cat mimi");
//manage可以配置在Spring中
EventManage manage = EventManage.getInstance();
//具体的添加监听器不加载这里,而是在具体的鼠上面。因为鼠加不加具有自己的选择性
manage.triggerEvent();
}
}


5,事件管理类:用来管理监听器和触发器
 
  

package 观察者模式;

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



public class EventManage {

private static EventManage manage = new EventManage();
private EventManage(){
}
public static EventManage getInstance(){
//我的原意是:在Spring加载bean的时候就加载这两个类
//这样就能加载这个类的static块从而加载具体的监听器
new Baishu();
return manage;
}
private List<Listening> listenings = new ArrayList<Listening>();

public void addListening(Listening l){
if(null == listenings || listenings.isEmpty()){
listenings = new ArrayList<Listening>();
}
listenings.add(l);
}

public void removeListening(Listening l){
if(null == listenings || listenings.isEmpty()){
System.out.println("没有配置监听器");
}
listenings.remove(l);
}

public void triggerEvent(){
if(null == listenings || listenings.isEmpty()){
listenings = new ArrayList<Listening>();
}
for(Listening l : listenings){
l.run();
}
}
}


5客户端调用类
 
  

package 观察者模式;

public class Client {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat cat = new Cat();
cat.mimi();
}

}


这样就写好了一个观察者模式的实现!不过如果是开发的话会用Spring去配置一些东西,但是整体上的是这样的!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值