观察者模式:
对象之间多对一依赖的一种设计方案,被依赖对象为Subject(一),依赖对象为Observer(多),Subject通知Observer变化
直接代码:
package com.wz.twoObserver;

public interface Subject {

    public void add(Observer student);

    public void del(Observer student);

    public void mNotify();
}
package com.wz.twoObserver;

public interface Observer {

    public void update(String name, String sex, String subject);

}
package com.wz.twoObserver;

import java.util.ArrayList;

/**
* 教师类
*
* @author Administrator
* @create 2018-04-18 11:50
*/
public class Teacher implements Subject{ private String name; private String sex;
// 学科
private String subject; private ArrayList<Observer> studentList; // 记住要将集合初始化
public Teacher() {
this.studentList = new ArrayList<>();
} public String getName() {
return name;
} public String getSex() {
return sex;
} public String getSubject() {
return subject;
} public void teacherUpdate(){
mNotify();
} public void setTeacher(String name, String sex, String subject){
this.name = name;
this.sex = sex;
this.subject = subject;
teacherUpdate();
} @Override
public void add(Observer student) {
studentList.add(student);
} @Override
public void del(Observer student) {
studentList.remove(student);
} @Override
public void mNotify() {
for (int i = 0; i < studentList.size() ; i++) {
studentList.get(i).update(name,sex,subject);
}
}
}
package com.wz.twoObserver;

/**
* 学生类
*
* @author Administrator
* @create 2018-04-18 11:53
*/
public class Student implements Observer{ private String name; private String sex;
// 学科
private String subject; @Override
public void update(String name, String sex, String subject){
this.name = name;
this.sex = sex;
this.subject = subject;
display();
} public void display(){
System.out.println("教师姓名:" + name);
System.out.println("教师的性别:" + sex);
System.out.println("教师的学科:" + subject);
System.out.println("=================================");
} }
package com.wz.twoObserver;

/**
* 学生类
*
* @author Administrator
* @create 2018-04-18 11:53
*/
public class Student1 implements Observer{ private String name; private String sex;
// 学科
private String subject; @Override
public void update(String name, String sex, String subject){
this.name = name;
this.sex = sex;
this.subject = subject;
display();
} public void display(){
System.out.println("教师姓名:" + name);
System.out.println("教师的性别:" + sex);
System.out.println("教师的学科:" + subject);
System.out.println("=================================");
} }
package com.wz.twoObserver;

/**
* 学生类
*
* @author Administrator
* @create 2018-04-18 11:53
*/
public class Student2 implements Observer{ private String name; private String sex;
// 学科
private String subject; @Override
public void update(String name, String sex, String subject){
this.name = name;
this.sex = sex;
this.subject = subject;
display();
} public void display(){
System.out.println("教师姓名:" + name);
System.out.println("教师的性别:" + sex);
System.out.println("教师的学科:" + subject);
System.out.println("=================================");
} }
package com.wz.twoObserver;

/**
* 测试类
*
* @author Administrator
* @create 2018-04-18 12:12
*/
public class TestMain { public static void main(String[] args) {
Teacher t1 = new Teacher();
Student s = new Student();;
Student1 s1 = new Student1();;
Student2 s2 = new Student2(); t1.add(s);
t1.add(s1);
t1.add(s2);
t1.setTeacher("郑爽","女","舞蹈");
System.out.println("======================================");
t1.del(s);
t1.setTeacher("杨洋","男","演技"); } } 自我感觉这个模式不是特别的理解,看的视频是以天气预报为例,我这以教师和学生为例,开始郑爽老师有3个学生,后来换成杨洋老师了,学生s就退学了,就剩下学生s1和s2的

java小白设计模式之观察者模式的更多相关文章

  1. JAVA的设计模式之观察者模式----结合ActiveMQ消息队列说明

    1----------------------观察者模式------------------------------ 观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的 ...

  2. Java常见设计模式之观察者模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Mo ...

  3. JAVA基础——设计模式之观察者模式

    观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...

  4. 理解java设计模式之观察者模式

    在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适 ...

  5. java设计模式之观察者模式以及在java中作用

    观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...

  6. 什么?女神发了朋友圈,快来围观之Java设计模式:观察者模式

    目录 观察者模式 示例 定义 设计原则 意图 主要解决问题 何时使用 优缺点 女神和追求者的故事 Java中的实现 观察者模式 示例 微信公众号,关注就可以收到推送的消息,取消关注就不会收到 定义 定 ...

  7. java_设计模式_观察者模式_Observer Pattern(2016-07-27)

    看了好几篇文章,最终还是觉得<Head First 设计模式>举得例子比较符合观察者模式. 观察者模式概述: 观察者模式有时被称作发布/订阅模式,它定义了一种一对多的依赖关系,让多个观察者 ...

  8. 设计模式之观察者模式(Observable与Observer)

    设计模式之观察者模式(Observable与Observer) 好久没有写博客啦,之前看完了<设计模式之禅>也没有总结一下,现在回忆一下设计模式之观察者模式. 1.什么是观察者模式 简单情 ...

  9. (@WhiteTaken)设计模式学习——观察者模式

    忙里抽闲,继续学习设计模式,作为自己的读书笔记,这次介绍Java下实现的观察者模式. 观察模式需要了解的三个概念: 被观察者:被观察的对象,发生变化会通知观察者集合(存放观察者的容器) 观察者:有up ...

随机推荐

  1. 解决Oracle登录时出现无法处理服务名问题

    1.首先找到客户端的tnsnames.ora文件,打开看看里面有没有配置相应的服务器名,服务器名就是你的数据库名: 2.如果有相应的服务器名,那就检查一下配置信息是否错误,如果没有就添加: 3.配置信 ...

  2. Linux下ping,telnet,ssh命令的比较

    ping工作在OSI模型的第三层,网络层. 主要用于测试到达目的主机的网络是否连接,不能检测某个端口是否开放. ping使用ICMP协议,不使用某个特定端口. 也可以 ping 域名 ,这样可以直接看 ...

  3. Java源码之HashMap

    一.HashMap和Hashtable的区别 (1)HashMapl的键值(key)和值(value)可以为null,而Hashtable不可以 (2)Hashtable是线程安全类,而HashMap ...

  4. C语言的第二次作业

    一.PTA实验作业 题目1. 计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.本题代码 #include<stdio.h> #include<math.h> int ...

  5. 201621123068 Week02-Java基本语法与类库

    1. 本周学习总结 1.1 当浮点数和整数放到一起运算时,java一般会将整数转化为浮点数然后进行浮点数计算,但是这样得出的结果通常与数学运算有一定误差,浮点数精确计算需要使用BigDecimal类 ...

  6. bzoj千题计划217:bzoj2333: [SCOI2011]棘手的操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=2333 读入所有数据,先模拟一遍所有的合并操作 我们不关心联通块长什么样,只关心联通块内有谁 所以可以 ...

  7. js 获取 最近七天 30天 昨天的方法 -- 转

    自己用到了 找了下  先附上原作的链接  http://www.cnblogs.com/songdongdong/p/7251254.html 原谅我窃取你的果实  谢谢你谢谢你 ~ 先附上我自己用到 ...

  8. JAVA_SE基础——30.构造代码块

    黑马程序员入学blog...构造代码块作用:给所有的对象进行统一的初始化. 问题:要求每个小孩出生都会哭,这份代码有两个构造函数,如果需要每个小孩出生都要哭的话,那么就需要在不同的构造函数中都调用cr ...

  9. python端口扫描用多线程+线程安全的队列+Thread类实现

    用线程安全的队列Queue实现扫描端口数据存储 用多线程扫描端口 用Thread类实现程序组织 #coding:utf-8 import sys import socket import sys im ...

  10. Web Api 利用 cors 实现跨域

    一.安装 cors 二.修改 Web.config <appSettings> <add key="cors:allowedMethods" value=&quo ...