版权声明:未经博主同意不得转载 https://blog.csdn.net/huang_qiang123/article/details/82715729
题目描述:上课铃声响,老师准备讲课,学生们准备听课;下课铃声响,老师准备下课休息,学生准备下课玩耍;
分析:铃声(Ring)作为被观察者,学生和老师作为观察者,根据铃声的改变做出不同的响应;
抽象观察者
package com.hq.szxy;
/**
* 抽象观察者
*/
public interface Observer {
//观察者反应
public abstract void response1();//上课反应
public abstract void response2();//下课反应
}
抽象目标
package com.hq.szxy;
/**
* 抽象目标
*/
import java.util.ArrayList;
import java.util.List;
abstract class Subject {
//定义一个集合存储观察者对象
protected List<Observer> observers = new ArrayList<Observer>();
//增加观察者
public void add(Observer observer) {
observers.add(observer);
}
//删除观察者
public void remove(Observer observer) {
observers.remove(observer);
}
//通知观察者方法
public abstract void notifyObserve1();
public abstract void notifyObserve2();
}
铃声(具体被观察者对象)
package com.hq.szxy;
/**
* 铃声(被观察者)
*/
public class Ring extends Subject {
@Override
public void notifyObserve1() {
System.out.println("上课铃响了");
for (Object object : observers) {
((Observer) object).response1();
}
System.out.println("------------");
}
@Override
public void notifyObserve2() {
System.out.println("下课铃响了");
for (Object object : observers) {
((Observer) object).response2();
}
System.out.println("------------");
}
}
老师
package com.hq.szxy;
/**
* 老师(观察者)
*/
public class Teacher implements Observer {
@Override
public void response1() {
System.out.println("老师准备认真讲课");
}
@Override
public void response2() {
System.out.println("老师准备下课休息");
}
}
学生
package com.hq.szxy;
/**
* 学生(观察者)
*/
public class Student implements Observer{
@Override
public void response1() {
System.out.println("学生准备认真听课");
}
@Override
public void response2() {
System.out.println("学生准备下课玩耍");
}
}
测试类
package com.hq.szxy;
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
Subject subject = new Ring();
Observer teacher = new Teacher();
Observer student = new Student();
subject.add(teacher);
subject.add(student);
subject.notifyObserve1();
subject.notifyObserve2();
}
}
运行结果