观察者模式 java 例子_java常用设计模式--观察者模式简单例子

package com.ruanyun;

import java.util.List;

import java.util.Vector;

/**

* @Auther: maxw

* @Date: 2018/11/10 16:14

* @Description:观察者模式

* 基本概念:

* 观察者模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

* 这一个模式的关键对象是目标(Subject)和观察者(Observer)。一个目标可以有任意数目的依赖它的观察者,一旦目标的状态发生改变,所有的观察者都得到通知,

* 作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标的状态同步。

* 适用场景:

* 观察者模式,用于存在一对多依赖关系的对象间,当被依赖者变化时,通知依赖者全部进行更新。

* 因此,被依赖者,应该有添加/删除依赖者的方法,且可以将添加的依赖者放到一个容器中;且有一个方法去通知依赖者进行更新。

*/

public class Test2 {

public static void main(String args[]){

Vector students =new Vector();

Teacher teacher =new Teacher();

for(int i=0;i<5;i++){

Student student =new Student(teacher,"student"+i);

students.add(student);

teacher.addStudent(student);

}

for(Student student :students){

student.showTelphone();

}

teacher.setTelphone("100000");

for(Student student :students){

student.showTelphone();

}

teacher.setTelphone("111111");

for(Student student :students){

student.showTelphone();

}

}

}

class Teacher{

private String telphone;

private Vector students;

public Teacher() {

telphone = "";

students = new Vector();

}

//添加学生

public void addStudent(Student student){

students.add(student);

}

//移除学生

public void removeStudent(Student student){

students.remove(student);

}

public String getTelphone() {

return telphone;

}

//更新手机号码

public void setTelphone(String telphone) {

this.telphone = telphone;

notice(); //设置手机号码的时候通知学生 关键

}

private void notice(){

for(Student student : students){

student.updateTelphone();

}

}

}

class Student{

private String teachPhone;

private Teacher teacher;

private String name;

public Student(Teacher teacher, String name) {

this.teacher = teacher;

this.name = name;

}

public void showTelphone(){

System.out.println(name+"老师电话为:"+teachPhone);

}

public void updateTelphone(){

teachPhone = teacher.getTelphone();

}

}

692b65ba26149a062262a50189626563.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值