发布-订阅模式:观察者就是一个监听者,类似监听器的存在,一旦被观察者/监听的目标发生的情况,就会被监听者发现,目标将情况发送到观察者
观察者模式多用于实现订阅功能的场景
/*** 观察者*/public interface Observer {void update(String message, String name);}
/*** 便衣人1*/public class Civies1 implements Observer {@Overridepublic void update(String message, String name) {System.out.println(name + "有情况" + message);}}/*** 便衣人2*/public class Civies2 implements Observer {@Overridepublic void update(String message, String name) {System.out.println(name + "有情况" + message);}}
/*** 目标接口*/public interface Target {void addObserver(Observer observer);void rmOberver(Observer observer);void notice(String message);}
/*** 嫌犯1*/public class Suspect1 implements Target {private String name = "嫌犯1";//观察者集合private List<Observer> list = new ArrayList<>();@Overridepublic void addObserver(Observer observer) {if (!list.contains(observer)) {list.add(observer);}}@Overridepublic void rmOberver(Observer observer) {if (list.contains(observer)) {list.remove(observer);}}@Overridepublic void notice(String message) {list.forEach(observer -> observer.update(message, name));}}
/*** 嫌犯2*/public class Suspect2 implements Target {private String name = "嫌犯2";private List<Observer> list = new ArrayList<>();@Overridepublic void addObserver(Observer observer) {if (!list.contains(observer)) {list.add(observer);}}@Overridepublic void rmOberver(Observer observer) {if (list.contains(observer)) {list.remove(observer);}}@Overridepublic void notice(String message) {list.forEach(item -> item.update(message, name));}}
public class Clienter {public static void main(String[] args) {//定义2个嫌犯Suspect1 suspect1 = new Suspect1();Suspect2 suspect2 = new Suspect2();//定义2个便衣Observer civies1 = new Civies1();Observer civies2 = new Civies2();//增加嫌犯便衣观察suspect1.addObserver(civies1);suspect1.addObserver(civies2);suspect2.addObserver(civies1);suspect2.addObserver(civies2);//定义嫌犯的情况String message1 = "又卖了一批货";String message2 = "老大来视察了";suspect1.notice(message1);suspect2.notice(message2);}}
