当前位置: 首页 > 后端技术 > Java

观察者模式:一种最贴近生活的设计模式

时间:2023-04-02 09:31:03 Java

鍦ㄤ紬澶氱殑璁捐妯″紡涓紝瑙傚療鑰呮ā寮忓彲浠ヨ鏄潪甯歌创杩戞垜浠殑鐢熸椿锛屾垜浠韩涓村叾澧冿紝鎵€浠ヤ篃鏄渶鐔熸倝鐨勩€備负浠€涔堣繖涔堣鍛紝鎴戜滑绮楃暐鐪嬩竴涓嬭瀵熻€呮ā寮忕殑鎻忚堪锛氬畾涔夊璞′箣闂翠竴瀵瑰鐨勪緷璧栧叧绯伙紝褰撲竴涓璞$殑鐘舵€佸彂鐢熷彉鍖栨椂锛屾墍鏈変緷璧栧畠鐨勫璞¢兘浼氭敹鍒伴€氱煡锛屽苟涓旀槸鑷姩鐨剈pdate瀵瑰唴瀹硅繘琛屽墫鏋愶紝鎴戜滑寰楀埌鍑犱釜鍏抽敭鍐呭锛氫竴瀵瑰瀵硅薄鐘舵€佹敼鍙橈紙鍗冲唴瀹规敼鍙橈級鎵€鏈変緷璧栧璞¤閫氱煡骞惰嚜鍔ㄦ洿鏂扮炕璇戯細鑰佸ぇ缁欏皬寮熷彂鍛戒护锛屼竴鏃﹀懡浠や竴鍙戝嚭锛屼笉灏戝皬寮熺涓€鏃堕棿灏辨敹鍒颁簡鑰佸ぇ鐨勬柊娑堟伅銆傝繖绉嶅叧绯荤殑搴旂敤鍦ㄧ敓娲讳腑涔熼殢澶勫彲瑙侊紝姣斿鏁欏畼瀵瑰+鍏碉紝鑰佸笀瀵瑰鐢燂紝鍏紬鍙峰璁㈤槄鑰呯瓑绛夛紝鍙儨灏忓紵缁忓父鏈夛紝鑰佹澘鍗存病鏈夈€傛墍浠ヤ互甯堢敓涓轰緥锛屾弿杩颁竴涓嬪叿浣撶殑浠g爜瀹炵幇銆傝璁℃€濊矾鍦ㄨ鍫備笂锛屾暀甯堜綔涓鸿瀛︾敓瑙傚療鐨勪富浣撶殑韬唤鏄疭ubject锛屽鐢熶綔涓鸿瀵熻€呯殑韬唤鏄疧bserver銆傝繖涓や釜瀵瑰簲鐨勬寮忓悕绉伴渶瑕佷簡瑙d竴涓嬨€?.棣栧厛鍒涘缓涓€涓猄ubject锛屽嵆Teacher绫汇€傚湪Teacher绫讳笅鍒涘缓涓€涓泦鍚堬紝鐢ㄦ潵瀛樺偍鍝簺瀛︾敓锛圤bserver锛夊湪鑰佸笀鐨勭彮绾с€傚皢娑堟伅瀹氫箟涓烘暀甯堝皢浼犺揪缁欏鐢熺殑淇℃伅銆俻ublicclassTeacher{privateListstudents=newArrayList();privateStringmessage;}瀹氫箟addStudent鏂规硶锛屽皢閫氳繃鐨勫鐢熶繚瀛樺埌闆嗗悎涓紝鏂逛究鑰佸笀鐭ラ亾鑷繁鐝骇鏈夊摢浜涘鐢焢ublicvoidaddStudent(Studentstu){students.add(stu);}瀹氫箟Get鍜孲et鏂规硶鑾峰彇鍜岃缃秷鎭唴瀹筽ublicStringgetMessage(){returnmessage;}publicvoidsetMessage(Stringmessage){this.message=message;notifyAllStu();}鍦╯etMessage鏂规硶涓紝姣忔Message鏇存柊锛堥噸鏂拌祴鍊硷級锛屾洿鏂板悗鐨勫唴瀹归€氳繃notifyAllStu()鍙戦€佺粰瀛︾敓锛屽鐢熸敹鍒扮殑鍐呭閫氳繃accept()鏂规硶杈撳嚭瀛︾敓鐝€俻rivatevoidnotifyAllStu(){for(Studentstu:students){stu.accept();}}2銆傚畾涔塐bserver锛屼篃灏辨槸Student鎶借薄绫伙紝鍥犱负鏈夊涓鐢燂紝姣忎釜瀛︾敓閮戒笉涓€鏍枫€備簬鏄娊璞″嚭鏉ワ紝鐢熺敓閫氳繃缁ф壙鍏蜂綋鍖栵紝瀹炵幇澶氭€併€傝繖鏍疯€佸笀灏变笉鐢ㄥ叧蹇冩槸鍝釜瀛︾敓浜嗭紝鍙鏄鐢熷氨鍙互鍦ㄨ鍫備笂瀹氫箟Teacher銆傝〃绀哄鐢熼€夋嫨鐨勮€佸笀瀹氫箟浜哸ccept鏂规硶锛岃〃绀哄鐢熸帴鍙楃殑娑堟伅鍐呭銆傚叕鍏辨娊璞$被瀛︾敓{鍙椾繚鎶ょ殑鑰佸笀鑰佸笀锛沺ublicabstractvoidaccept();}涔嬫墍浠ヤ娇鐢ㄦ娊璞$被鑰屼笉鏄帴鍙o紝鏄洜涓烘垜浠彲浠ュ湪鎶借薄绫讳腑瀹氫箟灞炴€у拰鏂规硶浣擄紝閫氳繃瀛愮被缁ф壙瀹炵幇璧嬪€煎拰閲嶅啓锛岃€屾帴鍙d笉鑳芥弧瓒虫垜浠璁$殑瑕佹眰銆傜户鎵縎tudent瀹炵幇閫氳繃鏋勯€犳柟娉曚紶閫掔粰閫変腑鏁欏笀鐨勫叿浣揝tudentA瀵硅薄锛岃皟鐢═eacher.addStudent()灏嗗鐢熸坊鍔犲埌鏁欏笀鐨勭彮绾у垪琛ㄤ腑publicclassStudentAextendsStudent{publicStudentA(TeacherTeacher){this.鑰佸笀=鑰佸笀锛汿eacher.addStudent(杩欎釜);}@Overridepublicvoidaccept(){System.out.println("瀛︾敓A宸茬粡鏀跺埌鑰佸笀鐨勭煡璇嗙偣锛?+this.teacher.getMessage());}}浠ユ绫绘帹锛屾垜浠疄鐜颁簡涓変釜瀛︾敓A銆丅銆丆銆?.缂栧啓娴嬭瘯绫籶ublicclassobserveTest{publicstaticvoidmain(String[]args){TeacherTeacher=newTeacher();StudentAstudentA=newStudentA(鑰佸笀);StudentBstudentB=newStudentB(鑰佸笀);StudentCstudentC=newStudentC(鑰佸笀);System.out.println("鑰佸笀寮€濮嬭绗竴涓煡璇嗙偣浜嗭紒");Teacher.setMessage("1+1=2");System.out.println("鑰佸笀寮€濮嬭绗簩涓煡璇嗙偣浜嗭紒");Teacher.setMessage("2+2=4");System.out.println("瀛︿範缁撴潫锛屼笅璇撅紒锛侊紒");}}杩愯缁撴灉锛氱粨鍚堟祴璇曚唬鐮佸彲浠ョ湅鍑猴紝姣忓綋鑰佸笀鏇存柊娑堟伅鏃讹紝瀛︾敓鍙互鑷姩鎺ユ敹鍒拌€佸笀鏇存柊鐨勫唴瀹癸紝瀹炵幇浜嗘墍璋撶殑锛氫竴瀵瑰锛岀姸鎬佸彉鍖栵紝娑堟伅鏇存柊銆傛垜鏄疕aoo锛岀紪绋嬬晫鐨勬矇鑵撅紝鎷ユ湁涓€棰椾箰瑙傜殑蹇冿紝鍐欏嚭鏈夎叮鐨勬枃绔犮€俓濡傛灉鏈枃瀵规偍鏈夊府鍔╋紝璇锋敹钘忊瓙鍠滄馃憤骞跺叧娉煈€锛屽叧娉ㄤ笉杩疯矾(馃尰鈼♀€库棥)

最新推荐
猜你喜欢