设计模式代码实战-观察者模式

发布于:2024-04-20 ⋅ 阅读:(22) ⋅ 点赞:(0)

1、问题描述

小明所在的学校有一个时钟(主题),每到整点时,它就会通知所有的学生(观察者)当前的时间,请你使用观察者模式实现这个时钟通知系统。
注意点:时间从 0 开始,并每隔一个小时更新一次。

输入示例
2
Alice
Bob
3
输出示例
Alice 1
Bob 1
Alice 2
Bob 2
Alice 3
Bob 3

2、观察者模式

主要逻辑是在主题中,负责观察者的增删改和通知,在主题中的通知方法中,通知所有的观察者。
请添加图片描述

3、代码

import com.sun.java.accessibility.util.TopLevelWindowListener;

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        int number=Integer.parseInt(sc.nextLine());
        ConcreteClock c=new ConcreteClock();
        for(int i=0;i<number;i++){
            c.CreateStudent(new Student(sc.nextLine()));
        }
        int n=Integer.parseInt(sc.nextLine());
        for(int i=1;i<=n;i++){
            c.NotifyStudent(i);
        }

    }
}

interface Clock{
    void CreateStudent(Student s);

    void NotifyStudent(int tag);
}

class ConcreteClock implements Clock{
    private List<Student> list;
    public ConcreteClock(){
        list=new ArrayList<>();
    }
    @Override
    public void CreateStudent(Student s) {
        list.add(s);
    }



    @Override
    public void NotifyStudent(int tag) {
        for(Student tmp:list){
            tmp.update(tag);
        }
    }
}

class Student{
    private  String name;
    public Student(String name){
        this.name=name;
    }
    public void update(int time){
        System.out.println(this.name+" "+time);
    }
}