设计模式(1)observer

example:

微信订阅号

用户1 注册到 订阅号上,用户2 注册到 订阅号上,

订阅号,发通知给每一个用户。

1. 订阅号需要实现 regiser 功能,把user 添加到 list 里,之后可以通知给你一个用户 update函数,类似回调给用户

package com.example.observe;

public interface Subject {
    void registObserver (MyObserver myObserver);
    void removeObserver (MyObserver myObserver);
    void notifyObserver();
}
package com.example.observe;

import java.util.ArrayList;
import java.util.List;

public class ObjectForSubject implements Subject {
    private List<MyObserver> arrayList= new ArrayList<MyObserver>();

    @Override
    public void registObserver(MyObserver myObserver) {
        arrayList.add(myObserver);
    }

    @Override
    public void removeObserver(MyObserver myObserver) {
        arrayList.remove(myObserver);

    }

    @Override
    public void notifyObserver() {
        arrayList.forEach(item ->item.update("hello all"));

    }
}

User 需要实现 update 回调:

package com.example.observe;

public interface MyObserver {
    public void update (String msg);
}
package com.example.observe;

import android.util.Log;

public class ObserverImp implements MyObserver {
    private static String TAG = MyObserver.class.getSimpleName() + "LIU";
    private String id;
    public ObserverImp(String id) {
        this.id = id;
    }

    @Override
    public void update(String msg) {
        Log.d(TAG, "Myobserver" + msg + "id =" + this.id);
    }
}

实现调用代码:

        ObjectForSubject objectForSubject = new ObjectForSubject();
        ObserverImp observerImp1 = new ObserverImp("1");
        ObserverImp observerImp2 = new ObserverImp("2");
        objectForSubject.registObserver(observerImp1);
        objectForSubject.registObserver(observerImp2);
        objectForSubject.notifyObserver();

log:

2024-10-01 08:48:29.970 25436-25436/com.example.observe D/MyObserverLIU: Myobserverhello allid =1
2024-10-01 08:48:29.970 25436-25436/com.example.observe D/MyObserverLIU: Myobserverhello allid =2

android example:

类似于 android  broadcast 的处理方式

register myReceiver.

when intent comming,  then notify all recevier.

参考:

设计模式 观察者模式 以微信公众服务为例_微服务 观察者模式 通知所有服务-CSDN博客

GitHub - youlookwhat/DesignPattern: 📚 Java 23种设计模式全归纳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值