发布订阅模式测试类 public class PublishSubscribeDemo { public static void main(String[] args) { // 创建发布者 TangSeng publisher = new TangSeng(); // 创建订阅者 Subscribe subscriber1 = new SubscribeWuKong(); Subscribe subscriber2 = new SubscribeWuNeng(); Subscribe subscriber3 = new SubscribeWuJing(); // 发布者注册订阅者 publisher.addObserver(subscriber1); publisher.addObserver(subscriber2); publisher.addObserver(subscriber3); // 发布消息 publisher.notifyObservers("女儿国国王逼着成亲..."); publisher.notifyObservers("被妖怪抓走了"); publisher.notifyObservers("%#$@#%$#%..."); // 移除订阅者 publisher.removeObserver(subscriber2); // 再次发布消息 publisher.notifyObservers("被抓走了"); } }
消息发布者类
public class TangSeng { private final List<Subscribe> observers=new ArrayList<>(); public void addObserver(Subscribe observer) { observers.add(observer); } public void removeObserver(Subscribe observer) { observers.remove(observer); } public void notifyObservers(String message) { for (Subscribe observer : observers) { observer.update(message); } } }
订阅者接口
public interface Subscribe { void update(String message); }
具体订阅者
public class SubscribeWuKong implements Subscribe { @Override public void update(String message) { System.out.println("WuKong received message: " + message); // do something if(message.contains("成亲")){ System.out.println(" 这要看师父的道行了..."); } if(message.contains("抓")){ System.out.println(" 找观音菩萨诉苦,并请求降妖..."); } if(message.contains("%#$")){ System.out.println(" 头痛欲裂..."); } } }
public class SubscribeWuNeng implements Subscribe { @Override public void update(String message) { System.out.println("WuNeng received message: " + message); // do something if(message.contains("成亲")){ System.out.println(" 师父,你就答应了算了..."); } if(message.contains("抓")){ System.out.println(" 大师兄师父被妖怪抓走了..."); } if(message.contains("%#$")){ System.out.println(" 表面嬉笑,实则心疼大师兄!"); } } }
public class SubscribeWuJing implements Subscribe { @Override public void update(String message) { System.out.println("WuJing received message: " + message); // do something if(message.contains("成亲")){ System.out.println(" 这可如何是好..."); } if(message.contains("抓")){ System.out.println(" 大师兄、二师兄,师父被妖怪抓走了..."); } if(message.contains("%#$")){ System.out.println(" 师父别念啦... "); } } }