Java设计模式——观察者模式
转载自:http://www.cnblogs.com/V1haoge/p/6513651.html
观察者接口:Observer
public interface Observer { void update(String message, String name); }
定义三个观察者:Bianyi1、Bianyi2、Bianyi3
/** * 便衣警察张昊天 */ public class Bianyi1 implements Observer { // 定义姓名 private String bname = "张昊天"; @Override public void update(String message, String name) { System.out.println(bname + ":" + name + "那里有新情况:" + message); } } /** * 便衣警察石破天 */ public class Bianyi2 implements Observer { // 定义姓名 private String bname = "石破天"; @Override public void update(String message, String name) { System.out.println(bname + ":" + name + "那里有新情况:" + message); } } /** * 便衣警察赵日天 */ public class Bianyi3 implements Observer { // 定义姓名 private String bname = "赵日天"; @Override public void update(String message, String name) { System.out.println(bname + ":" + name + "那里有新情况:" + message); } }
目标接口:Target
public interface Target { // 添加便衣观察者 void addObserver(Observer observer); // 移除便衣观察者 void removeObserver(Observer observer); // 通知观察者 void notice(String message); }
定义两个嫌疑犯:XianFan1、XianFan2
/** * 嫌犯大熊 */ public class XianFan1 implements Target { // 别称 private String name = "大熊"; // 定义观察者集合 private List<Observer> observerList = new ArrayList<Observer>(); // 增加观察者 @Override public void addObserver(Observer observer) { if (!observerList.contains(observer)) { observerList.add(observer); } } // 移除观察者 @Override public void removeObserver(Observer observer) { if (observerList.contains(observer)) { observerList.remove(observer); } } // 通知观察者 @Override public void notice(String message) { for (Observer observer : observerList) { observer.update(message, name); } } } /** * 嫌犯黑狗 */ public class XianFan2 implements Target { // 别称 private String name = "黑狗"; // 定义观察者集合 private List<Observer> observerList = new ArrayList<Observer>(); // 增加观察者 @Override public void addObserver(Observer observer) { if (!observerList.contains(observer)) { observerList.add(observer); } } // 移除观察者 @Override public void removeObserver(Observer observer) { if (observerList.contains(observer)) { observerList.remove(observer); } } // 通知观察者 @Override public void notice(String message) { for (Observer observer : observerList) { observer.update(message, name); } } }
测试类:Clienter
public class Clienter { public static void main(String[] args) { // 定义两个嫌犯 Target tg1 = new XianFan1(); Target tg2 = new XianFan2(); // 定义三个观察便衣警察 Observer o1 = new Bianyi1(); Observer o2 = new Bianyi2(); Observer o3 = new Bianyi3(); // 为嫌犯增加观察便衣 tg1.addObserver(o1); tg1.addObserver(o2); tg2.addObserver(o1); tg2.addObserver(o3); // 定义嫌犯1的情况 String message1 = "又卖了一批货"; String message2 = "老大要下来视察了"; tg1.notice(message1); tg2.notice(message2); } }