过程: 1、初始化发布者订阅者 2、订阅者注册到发布者 3、发布者通知订阅者
流程跟关注微博一样。
demo:
package com.zyf.publishsubscribe.publish;
import com.zyf.publishsubscribe.subscribe.Subscriber;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author zyf
* 发布者
*/
@Data
public class Publisher {
private String name;
public Publisher(String name) {
this.name = name;
}
//注册容器
List<Subscriber> subscribers = new ArrayList<>();
/**
* 注册
* @param subscriber
*/
public void register(Subscriber subscriber) {
this.subscribers.add(subscriber);
}
/**
* 发布通知
*/
public void publish(){
for (Subscriber subscriber: subscribers) {
System.out.println(name + " 通知给:"+subscriber.getName());
subscriber.receive(name);
}
}
}
package com.zyf.publishsubscribe.subscribe;
import lombok.Data;
/**
* @author zyf
* 订阅者
*/
@Data
public class Subscriber {
private String name;
public Subscriber(String name) {
this.name = name;
}
public void receive(String publisherName){
System.out.println(name+" 收到 "+publisherName+" 的通知");
}
}
package com.zyf.publishsubscribe;
import com.zyf.publishsubscribe.publish.Publisher;
import com.zyf.publishsubscribe.subscribe.Subscriber;
/**
* @author zyf
*/
public class Test {
public static void main(String[] args) {
/**
* 1、初始化发布者订阅者
* 2、订阅者注册到发布者
* 3、发布者通知订阅者
*/
Publisher p1 = new Publisher("腾讯");
Publisher p2 = new Publisher("新浪");
Subscriber s1 = new Subscriber("s1");
Subscriber s2 = new Subscriber("s2");
Subscriber s3 = new Subscriber("s3");
Subscriber s4 = new Subscriber("s4");
//注册
p1.register(s4);
p2.register(s1);
p2.register(s2);
p2.register(s3);
//发布通知
p1.publish();
p2.publish();
}
}