文档章节

行为型模式之一:观察者模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:55
字数 326
阅读 21
收藏 0

简单来说,观察者模式 = 发布 + 订阅 观察者模式在GUI 动作监听器中又使用,Swing GUI 例子中展现了动作监听器像监听器一样工作。 下面是一个关于猎头的典型例子,这里在类图中有两个角色-HeadHunter和JobSeeker。求职者订阅一个猎头,当有新职位机会时,收听猎头的通知信息。

类图

Java代码

Subject 接口

public interface Subject {
  public void registerObserver(Observer o);
  public void removeObserver(Observer o);
  public void notifyAllObservers();
}

Observer 接口

public interface Observer {
  public void update(Subject s);
}

HeadHunter 实现了Subject

import java.util.ArrayList;
 
public class HeadHunter implements Subject{
 
  //define a list of users, such as Mike, Bill, etc.
  private ArrayList userList;
  private ArrayList jobs;
 
  public HeadHunter(){
    userList = new ArrayList();
    jobs = new ArrayList();
  }
 
  @Override
  public void registerObserver(Observer o) {
    userList.add(o);
  }
 
  @Override
  public void removeObserver(Observer o) {}
 
  @Override
  public void notifyAllObservers() {
    for(Observer o: userList){
      o.update(this);
    }
  }
 
  public void addJob(String job) {
    this.jobs.add(job);
    notifyAllObservers();
  }
 
  public ArrayList getJobs() {
    return jobs;
  }
 
  public String toString(){
    return jobs.toString();
  }
}

JobSeeker 是一个观察者

public class JobSeeker implements Observer {
 
  private String name;
 
  public JobSeeker(String name){
    this.name = name;
  }
  @Override
  public void update(Subject s) {
    System.out.println(this.name + " got notified!");
    //print job list
    System.out.println(s);
  }
}

开始点

public class Main {
 
  public static void main(String[] args) {
    HeadHunter hh = new HeadHunter();
    hh.registerObserver(new JobSeeker("Mike"));
    hh.registerObserver(new JobSeeker("Chris"));
    hh.registerObserver(new JobSeeker("Jeff"));
 
    //Each time, a new job is added, all registered job seekers will get noticed.
    hh.addJob("Google Job");
    hh.addJob("Yahoo Job");
  }
}

观察者模式在JDK中

java.util.EventListener Swing GUI 例子

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0
设计模式笔录(二),设计模式有哪些

本人出道5年,学习、编程、再学习、再编程一路走过,只是在笔和纸留下些脚印,实感惭愧。现开始把自己学习到的心得,实践中的体会,一一贴在互联网上,大家互相学习、探讨,寻找一些技术朋友...

方旭
2011/03/31
0
0
JavaScript常用设计模式

设计模式 设计模式是一种在长时间的经验与错误中总结出来可服用的解决方案。 设计模式主要分为3类: 创建型设计模式:专注于处理对象的创建 Constructor构造器模式,Factory工厂模式,Singl...

a独家记忆
07/13
0
0
JavaScript设计模式入坑

JavaScript设计模式入坑 介绍 设计模式编写易于维护的代码。 设计模式的开创者是一位土木工程师。Σ( ° △ °|||)︴,写代码就是盖房子。 模式 模式一种可以复用的解决方案。解决软件设计中...

小小小8021
10/18
0
0
Java经典设计模式基础

一、概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 (2)结构型模式,共七种:适配器模式、装饰器模式、代理...

Idea
01/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ViewPager系列之软件主页面切换制作

效果图:ViewPager制作的页面能左右滑动,而Fragment制作的页面却不能左右滑动。 代码: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.......

鱼想吃肉
12分钟前
0
0
大话后端开发的奇淫技巧大集合

Hi,大家好,很荣幸有这个机会可以通过写博文的方式,把这些年在后端开发过程中总结沉淀下来的经验和设计思路分享出来 模块化设计 根据业务场景,将业务抽离成独立模块,对外通过接口提供服务...

James-
12分钟前
0
0
函数

1、函数的定义:从function关键字开始,后面跟随{ (1)函数名字 (2)圆括号 (3)花括号 } function arr() {}

墨冥
13分钟前
0
0
ZABBIX 3.4 (一) 监测Nginx状态及脚本

ZABBIX 3.4 (一) 监测Nginx状态及脚本 2018年08月31日 16:56:48 YoFog 阅读数:106 标签: zabbix agentzabbix nginxnginx_status监控nginxzabbix脚本更多 个人分类: 运维 版权声明:本文...

linjin200
14分钟前
0
0
Spring 之 IOC 初始化总结

IOC 容器的初始化过程分为三步骤: Resource 定位 BeanDefinition 的载入和解析 BeanDefinition 注册 Resource 定位。我们一般用外部资源来描述 Bean 对象,所以在初始化 IOC 容器的第一步就...

专业搬砖工程师
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部