发布/订阅是一种消息范式,消息发布者(Publisher)不会将消息直接发送给订阅者(Subscriber),而是通过消息通道(Event Channel)广播出去,让订阅者收到。
核心代码
//1.发布者接口
public interface Publisher {
public void publish(Channel channel ,String msg);
}
//2.订阅者接口
public interface Subcriber {
public void subcribe(Channel channel);
public void update(String msg);
}
//3.消息通道类
public class Channel{
private String name;
private List<Subcriber> subcribers = new ArrayList<Subcriber>();
public void publish(String msg) {
update(msg);
}
public void subcribe(Subcriber subcriber) {
subcribers.add(subcriber);
}
public void update(String msg) {
for (Subcriber subcriber : subcribers) {
subcriber.update(msg);
}
}
}
//4.发布者实现类
public class PublisherImpl implements Publisher{
private String name;
public void publish(Channel channel ,String msg) {
channel.publish(channel,this. msg);
}
}
//5.订阅者实现类
public class SubcriberImpl implements Subcriber{
private String name;
public void subcribe (Channel channel) {
channel. subcribe (this);
}
}
//6.测试
public static void main(String[] args) {
Channel channel=new Channel(“消息通道”);
Publisher publisher1 = new PublisherImpl("发布者1");
Subcriber subcriber1 = new SubcriberImpl("订阅者1");
Subcriber subcriber2 = new SubcriberImpl("订阅者2");
subcriber1.subcribe(channel);
subcriber2.subcribe(channel);
publisher1.publish(channel,”发送消息”)
}