利用观察者模式,来写上课铃声和下课铃声,对学生的反应状态。
抽象观察者
package com.Observer;
/*
抽象观察者
*/
public interface Observer {
void response1();//反应1
void response2();//反应2
}
抽象目标
package com.Observer;
import java.util.ArrayList;
import java.util.List;
//抽象目标
public 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();//通知观察者方法1
public abstract void notifyObserve2();//通知观察者方法2
}
具体目标
package com.Observer;
public class ConcreteSubject extends Subject{
@Override
public void notifyObserve1() {
System.out.println("上课铃声响......");
System.out.println("---------------------");
for(Object object : observers){
((Observer)object).response1();
}
}
public void notifyObserve2(){
System.out.println("下课铃声......");
System.out.println("-----------------");
for(Object object : observers){
((Observer)object).response2();
}
}
}
老师
package com.Observer;
//老师
public class ConcreteObserver1 implements Observer{
@Override
public void response1(){
System.out.println("准备讲课");
}
@Override
public void response2(){
System.out.println("准备下课");
}
}
学生
package com.Observer;
//学生
public class ConcreteObserver2 implements Observer{
@Override
public void response1() {
System.out.println("准备听课");
}
@Override
public void response2(){
System.out.println("准备休息");
}
}
具体验证
package com.Observer;
//观察者设计模式
public class ObserverPattern {
public static void main(String[] args){
Subject subject = new ConcreteSubject();
Observer observer1 = new ConcreteObserver1();
Observer observer2 = new ConcreteObserver2();
subject.add(observer1);
subject.add(observer2);
subject.notifyObserve1();
subject.notifyObserve2();
}
}