警报观察

Observer

Observer接口

public interface Observer {
    //通知
    void notice();
    String  getName();
}

Alarm

public class Alarm {
    List<Observer> observers = new ArrayList<>();

    public void addObserver(Observer o){
        observers.add(o);
    }

    public void removeObserver(Observer o){
        observers.remove(o);
    }

    public void notice(){
        for (Observer observer:this.observers){
            observer.notice();
        }
    }
}

Fighter

public class Fighter implements Observer{
    private String name;

    public Fighter() {
    }

    public Fighter(String name) {
        this.name = name;
    }

    @Override
    public void notice() {
        System.out.println(name+"士兵向城外集合...");
    }

    @Override
    public String getName() {
        return this.name;
    }
}

Worker

public class Worker implements Observer{
    private String name;

    public Worker() {
    }

    public Worker(String name) {
        this.name = name;
    }

    @Override
    public void notice() {
        System.out.println(name+"工人向城内集合...");
    }

    @Override
    public String getName() {
        return this.name;
    }
}

Main

public class Main {
    public static void main(String[] args) {
        Alarm alarm = new Alarm();
        Fighter f1 = new Fighter("peter");
        Fighter f2 = new Fighter("gus");
        Worker w1 = new Worker("al");
        Worker w2 = new Worker("patrick");

        alarm.addObserver(f1);
        alarm.addObserver(f2);
        alarm.addObserver(w1);
        alarm.addObserver(w2);

        alarm.notice();
    }
}
posted @   NeverLateThanBetter  阅读(31)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-10-19 File类-IO流
点击右上角即可分享
微信分享提示