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

文章讲述了如何利用观察者模式在Java中设计一个时钟系统,当时间变化时,时钟对象会通知关联的学生观察者进行相应操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值