软件设计模式与体系结构-第二次内作业

利用观察者模式,来写上课铃声和下课铃声,对学生的反应状态。

抽象观察者

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();
    }
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/tangzongpi6936/article/details/82629451