1 package com.shejimoshi.behavioral.Observer; 2 3 4 /** 5 * 功能:學生觀察者 6 * 時間:2016年3月7日上午10:28:00 7 * 作者:cutter_point 8 */ 9 public interface Student 10
1 package com.shejimoshi.behavioral.Observer; 2 3 4 /** 5 * 功能:學生觀察者 6 * 時間:2016年3月7日上午10:28:00 7 * 作者:cutter_point 8 */ 9 public interface Student 10 { 11 //根據相應的事件作出反應 12 public abstract void reaction(); 13 }
1 package com.shejimoshi.behavioral.Observer; 2 3 4 /** 5 * 功能:學生類具體觀察者 6 * 時間:2016年3月7日上午10:30:57 7 * 作者:cutter_point 8 */ 9 public class SeniorHighSchoolStudents implements Student 10 { 11 //老師 12 private Teacher teacher; 13 private String name; //名字 14 15 public SeniorHighSchoolStudents() 16 { 17 } 18 19 public SeniorHighSchoolStudents(Teacher t, String n) 20 { 21 this.teacher = t; 22 this.name = n; 23 } 24 25 /** 26 * 學生做出相應的反應 27 */ 28 @Override 29 public void reaction() 30 { 31 String action = teacher.getAction(); 32 System.out.println("老師說:" + action + "\t" + name + "回到教室,準備學習"); 33 } 34 35 }
1 package com.shejimoshi.behavioral.Observer; 2 3 4 /** 5 * 功能:老師類,作為通知者 6 * 時間:2016年3月7日上午10:31:16 7 * 作者:cutter_point 8 */ 9 public interface Teacher 10 { 11 /** 12 * 添加學生 13 * @param student 14 */ 15 public void addStrudnet(Student student); 16 17 /** 18 * 開除一個同學 19 * @param student 20 */ 21 public void removeStudent(Student student); 22 23 /** 24 * 開始上課 25 */ 26 public void classBegin(); 27 28 /** 29 * 取得通知事件 30 * @return 31 */ 32 public String getAction(); 33 }
1 package com.shejimoshi.behavioral.Observer; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 7 /** 8 * 功能:曹老師 9 * 時間:2016年3月7日上午10:36:30 10 * 作者:cutter_point 11 */ 12 public class TeacherChao implements Teacher 13 { 14 private List<Student> ls = new ArrayList<Student>(); 15 private String action; //事件 16 17 @Override 18 public void addStrudnet(Student student) 19 { 20 ls.add(student); 21 } 22 23 @Override 24 public void removeStudent(Student student) 25 { 26 ls.remove(student); 27 } 28 29 @Override 30 public void classBegin() 31 { 32 33 for(Student s : ls) 34 { 35 //通知上課開始 36 s.reaction(); 37 }//for 38 } 39 40 public String getAction() 41 { 42 return action; 43 } 44 45 public void setAction(String action) 46 { 47 this.action = action; 48 } 49 50 }
測試代碼:
1 package com.shejimoshi.behavioral.Observer; 2 3 4 /** 5 * 功能:定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變的時候,所有依賴於它的對對象都得到通知並被自動更新 6 * 適用:當一個抽象模式有兩個方面的時候,其中一個方面依賴另外一個方面。將這兩種封裝在獨立的對象中以使它們可以獨立地改變和復用 7 * 當對一個對象的改變需要同時改變其他對象,而不知道具體有多少對象有待改變 8 * 當一個對象必須通知其他對象,而它又不能假定其它對象是誰。換言之,你不希望這些對象時緊密耦合的 9 * 時間:2016年3月7日上午8:32:18 10 * 作者:cutter_point 11 */ 12 public class Test 13 { 14 public static void main(String[] args) 15 { 16 TeacherChao tc = new TeacherChao(); 17 //學生 18 SeniorHighSchoolStudents xiaoming = new SeniorHighSchoolStudents(tc, "小明"); 19 SeniorHighSchoolStudents xiaocheng = new SeniorHighSchoolStudents(tc, "小城"); 20 SeniorHighSchoolStudents xiaohong = new SeniorHighSchoolStudents(tc, "小紅"); 21 SeniorHighSchoolStudents xiaozhi = new SeniorHighSchoolStudents(tc, "小智"); 22 SeniorHighSchoolStudents xiaohua = new SeniorHighSchoolStudents(tc, "笑話"); 23 24 tc.addStrudnet(xiaoming); tc.addStrudnet(xiaocheng); tc.addStrudnet(xiaohong); 25 tc.addStrudnet(xiaozhi); tc.addStrudnet(xiaohua); 26 27 tc.setAction("上課"); 28 tc.classBegin(); //老師上課啦 29 30 } 31 }
測試結果:
老師說:上課 小明回到教室,準備學習 老師說:上課 小城回到教室,準備學習 老師說:上課 小紅回到教室,準備學習 老師說:上課 小智回到教室,準備學習 老師說:上課 笑話回到教室,準備學習