轉自:http://www.cnblogs.com/V1haoge/p/6513651.html 觀察者介面:Observer 定義三個觀察者:Bianyi1、Bianyi2、Bianyi3 目標介面:Target 定義兩個嫌疑犯:XianFan1、XianFan2 測試類:Clienter ...
轉載自: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); } }