观察者模式其实就是一个通知系统

观察者模式其实就是一个通知系统,比如说你订阅了一个YouTube频道,当这个频道上传新视频时,你就会收到通知。这个模式就像你是观察者,YouTube频道是被观察者,当频道有新内容时,它会通知你,你就会去看新内容。

1.组成部分

  1. 被观察者(YouTube频道)
  • 有很多观众关注它
  • 当它发布新视频时,需要通知所有的观众
  1. 观察者(观众)
  • 订阅了多个频道(被观察者)
  • 当某个频道发布新视频,会受到通知

2.实现方式

  1. 被观察者(YouTube频道)需要有一个观众列表:
  • 这个列表保存了所有订阅这个频道的观众。
  • 当有新视频发布时,频道会遍历这个列表,通知每一个观众。
  1. 观众(观察者)订阅频道(被观察者):
  • 当观众想订阅一个频道时,会将自己添加到频道的观众列表里。
  • 当观众不想再订阅这个频道时,可以将自己从频道的观众列表里移除。

3.JAVA示例

定义观察者接口(观众)
public interface Observer {
    void update(String videoTitle);
}
定义被观察者类(YouTube频道)
import java.util.ArrayList;
import java.util.List;

public class YouTubeChannel {
    private List<Observer> observers = new ArrayList<>();
    private String channelName;

    public YouTubeChannel(String channelName) {
        this.channelName = channelName;
    }

    public void subscribe(Observer observer) {
        observers.add(observer);
    }

    public void unsubscribe(Observer observer) {
        observers.remove(observer);
    }

    public void uploadVideo(String videoTitle) {
        System.out.println("Channel " + channelName + " uploaded a new video: " + videoTitle);
        notifyObservers(videoTitle);
    }

    private void notifyObservers(String videoTitle) {
        for (Observer observer : observers) {
            observer.update(videoTitle);
        }
    }
}
实现具体的观察者(观众)
public class Subscriber implements Observer {
    private String name;

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

    @Override
    public void update(String videoTitle) {
        System.out.println("Hey " + name + ", new video uploaded: " + videoTitle);
    }
}
测试
public class ObserverPatternTest {
    public static void main(String[] args) {
        YouTubeChannel techChannel = new YouTubeChannel("TechChannel");

        Observer subscriber1 = new Subscriber("Alice");
        Observer subscriber2 = new Subscriber("Bob");

        techChannel.subscribe(subscriber1);
        techChannel.subscribe(subscriber2);

        techChannel.uploadVideo("Design Patterns in Java");
    }
}
结果

TechChannel上传新视频时,所有订阅了这个频道的观众(AliceBob)都会收到通知,并且打印出类似这样的信息:

Channel TechChannel uploaded a new video: Design Patterns in Java
Hey Alice, new video uploaded: Design Patterns in Java
Hey Bob, new video uploaded: Design Patterns in Java

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值