java小白设计模式之观察者模式
观察者模式:
对象之间多对一依赖的一种设计方案,被依赖对象为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小白设计模式之观察者模式的更多相关文章
- JAVA的设计模式之观察者模式----结合ActiveMQ消息队列说明
1----------------------观察者模式------------------------------ 观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的 ...
- Java常见设计模式之观察者模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Mo ...
- JAVA基础——设计模式之观察者模式
观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...
- 理解java设计模式之观察者模式
在生活实际中,我们经常会遇到关注一个事物数据变化的情况,例如生活中的温度记录仪,当温度变化时,我们观察它温度变化的曲线,温度记录日志等.对于这一类问题,很接近java设计模式里面的“观察者模式”,它适 ...
- java设计模式之观察者模式以及在java中作用
观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(Dependen ...
- 什么?女神发了朋友圈,快来围观之Java设计模式:观察者模式
目录 观察者模式 示例 定义 设计原则 意图 主要解决问题 何时使用 优缺点 女神和追求者的故事 Java中的实现 观察者模式 示例 微信公众号,关注就可以收到推送的消息,取消关注就不会收到 定义 定 ...
- java_设计模式_观察者模式_Observer Pattern(2016-07-27)
看了好几篇文章,最终还是觉得<Head First 设计模式>举得例子比较符合观察者模式. 观察者模式概述: 观察者模式有时被称作发布/订阅模式,它定义了一种一对多的依赖关系,让多个观察者 ...
- 设计模式之观察者模式(Observable与Observer)
设计模式之观察者模式(Observable与Observer) 好久没有写博客啦,之前看完了<设计模式之禅>也没有总结一下,现在回忆一下设计模式之观察者模式. 1.什么是观察者模式 简单情 ...
- (@WhiteTaken)设计模式学习——观察者模式
忙里抽闲,继续学习设计模式,作为自己的读书笔记,这次介绍Java下实现的观察者模式. 观察模式需要了解的三个概念: 被观察者:被观察的对象,发生变化会通知观察者集合(存放观察者的容器) 观察者:有up ...
随机推荐
- php和apache工作原理?
1.CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等 2.而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称 ...
- Java创建线程的三种方式
一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...
- MySQL升级-5.6升级到5.7版本&切换GTID模式
目前未在生产环境中升级过数据库版本,倒是在测试环境跟开发环境升级过. 可以通过mysqldump sql文件进行升级,也可以通过mysql_upgrade升级,前者耗时较长,且 ...
- Java并发编程实战(chapter_2)(对象发布、不变性、设计线程安全类)
一.发布与溢出 "发布(Publish)"一个对象的意思是指,使对象能够在当前作用于之外的代码中使用.这个"之外",尤为关键,各种出问题的地方,都是因为这个&q ...
- Python并发编程之进程
一.理论概念 1.定义 进程(Process 也可以称为重量级进程)是程序的一次执行.在每个进程中都有自己的地址空间.内存.数据栈以及记录运行的辅助数据,它是系统进行资源分配和调度的一个独立单位. 2 ...
- JavaScript(第三十一天)【JSON】
前两章我们探讨了XML的结构化数据,但开发人员还是觉得这种微型的数据结构还是过于烦琐.冗长.为了解决这个问题,JSON的结构化数据出现了.JSON是JavaScript的一个严格的子集,利用JavaS ...
- Java暑假作业
一.电影观后感 电影<摔跤吧!爸爸>观后感 二.下学期的计划与目标 大一学年总结: 参与了大大小小的学院活动,例如机器人搭建.辩论赛,也参加了学生会的部门,参与了组织活动.通过参与活动获 ...
- 详谈C++虚函数表那回事(一般继承关系)
沿途总是会出现关于C++虚函数表的问题,今天做一总结: 1.什么是虚函数表: 虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的.简称为V-Table. ...
- vue 在methods中调用mounted中的方法?
首先可以在data中先声明一个变量 比如 isShow=' ' mounted 中 ---> methods 中 ---> this.sureDelBox(item) 直接this调用 ...
- JAVA_SE基础——66.StringBuffer类 ③
如果需要频繁修改字符串 的内容,建议使用字符串缓冲 类(StringBuffer). StringBuffer 其实就是一个存储字符 的容器. 容器的具备 的行为 常用方法 String 增加 ap ...