fbpx
วิกิพีเดีย

อ็อบเซิร์ฟเวอร์แพตเทิร์น

อ็อบเซิร์ฟเวอร์แพตเทิร์น (observer pattern หรือเรียกอีกชื่อว่า พับลิช/ซับสไครบ์ publish/subscribe) เป็นดีไซน์แพตเทิร์นที่ใช้แจ้งเหตุการณ์หรือข้อมูลข่าวสารจากคลาสต้นกำเนิดไปยังคลาสที่สมัครเป็นผู้รับข่าวสาร ตัวอย่างที่เด่นชัดได้แก่การสมัครเป็นสมาชิกรับหนังสือพิมพ์หรือนิตยสาร

การนำไปใช้งาน

โครงสร้างของอ็อบเซิร์ฟเวอร์แพตเทิร์นมีส่วนหลักสองส่วนคือผู้ส่งสารและผู้รับสาร

ผู้ส่งสารมีเมธอดหลักคือเมธอดสำหรับเพิ่มและลดผู้รับสาร และเมธอดสำหรับส่งสารไปยังผู้บอกรับข่าวสารทั้งหมด จากตัวอย่างคลาสไดอะแกรมอินเตอร์เฟส Publisher และคลาส NewspaperPublisher มีเมธอด subscribe(), remove() และ publish() ตามลำดับ

ส่วนผู้รับสารจะต้องมีเมธอดสำหรับที่ผู้ส่งสารใช้เรียกเมื่อต้องการส่งข่าวสาร จากคลาสไดอะแกรมอินเตอร์เฟส Subscriber และคลาส Reader มีเมธอด receive() ที่ Publisher เรียกใช้เมื่อต้องการส่งข่าวสาร

 
คลาสไดอะแกรมของอ็อบเซิร์ฟเวอร์แพตเทิร์น ในแบบ UML


ตัวอย่างโปรแกรม

ภาษาจาวา

ตัวอย่างโปรแกรมจำลองการทำงานของผู้พิมพ์หนังสือพิมพ์และผู้รับหนังสือพิมพ์ที่มีการทำงานในแบบอ็อบเซิร์ฟเวอร์แพตเทิร์น

อินเตอร์เฟส Publisher

public interface Publisher { public void subscribe(Subscriber subscriber); public void remove(Subscriber subscriber); public void publish(); } 

คลาส NewspaperPublisher

import java.util.ArrayList; public class NewspaperPublisher implements Publisher { private ArrayList<Subscriber> subscribers = new ArrayList<Subscriber>(); public void subscribe(Subscriber subscriber) { subscribers.add(subscriber); } public void remove(Subscriber subscriber) { subscribers.remove(subscriber); } public void publish() { Publisher pub = new NewspaperPublisher(); for (Subscriber subscriber : subscribers) { subscriber.receive(pub); } } } 

อินเตอร์เฟส Subscriber

public interface Subscriber { public void receive(Publisher publication); } 

คลาส Reader

public class Reader implements Subscriber { private String name; public Reader(String name) { this.name = name; } public void receive(Publisher publication) { System.out.println(name + " received " + publication); } } 

การเรียกใช้งาน

public class PublishSubscribeTest { public static void main(String[] args) { Reader reader1 = new Reader("reader 1"); Reader reader2 = new Reader("reader 2"); Publisher publisher = new NewspaperPublisher(); publisher.subscribe(reader1); publisher.subscribe(reader2); publisher.publish(); } } 

ผลการรัน

reader 1 received NewspaperPublisher@6b97fd reader 2 received NewspaperPublisher@6b97fd 

อ้างอิง

  • Design Patterns: Elements of Reusable Object-Oriented Software (ISBN 0-201-63361-2) โดย Erich Gamma, Richard Helm, Ralph Johnson และ John Vlissides (Gang of four: GoF)

แหล่งข้อมูลอื่น

อบเซ, ฟเวอร, แพตเท, observer, pattern, หร, อเร, ยกอ, กช, อว, บล, บสไครบ, publish, subscribe, เป, นด, ไซน, แพตเท, นท, ใช, แจ, งเหต, การณ, หร, อข, อม, ลข, าวสารจากคลาสต, นกำเน, ดไปย, งคลาสท, สม, ครเป, นผ, บข, าวสาร, วอย, างท, เด, นช, ดได, แก, การสม, ครเป, นสมาช,. xxbesirfewxraephtethirn observer pattern hruxeriykxikchuxwa phblich sbsikhrb publish subscribe epndiisnaephtethirnthiichaecngehtukarnhruxkhxmulkhawsarcakkhlastnkaenidipyngkhlasthismkhrepnphurbkhawsar twxyangthiednchdidaekkarsmkhrepnsmachikrbhnngsuxphimphhruxnitysar enuxha 1 karnaipichngan 2 twxyangopraekrm 2 1 phasacawa 3 xangxing 4 aehlngkhxmulxunkarnaipichngan aekikhokhrngsrangkhxngxxbesirfewxraephtethirnmiswnhlksxngswnkhuxphusngsaraelaphurbsarphusngsarmiemthxdhlkkhuxemthxdsahrbephimaelaldphurbsar aelaemthxdsahrbsngsaripyngphubxkrbkhawsarthnghmd caktwxyangkhlasidxaaekrmxinetxrefs Publisher aelakhlas NewspaperPublisher miemthxd subscribe remove aela publish tamladbswnphurbsarcatxngmiemthxdsahrbthiphusngsaricheriykemuxtxngkarsngkhawsar cakkhlasidxaaekrmxinetxrefs Subscriber aelakhlas Reader miemthxd receive thi Publisher eriykichemuxtxngkarsngkhawsar khlasidxaaekrmkhxngxxbesirfewxraephtethirn inaebb UMLtwxyangopraekrm aekikhphasacawa aekikh twxyangopraekrmcalxngkarthangankhxngphuphimphhnngsuxphimphaelaphurbhnngsuxphimphthimikarthanganinaebbxxbesirfewxraephtethirnxinetxrefs Publisher public interface Publisher public void subscribe Subscriber subscriber public void remove Subscriber subscriber public void publish khlas NewspaperPublisher import java util ArrayList public class NewspaperPublisher implements Publisher private ArrayList lt Subscriber gt subscribers new ArrayList lt Subscriber gt public void subscribe Subscriber subscriber subscribers add subscriber public void remove Subscriber subscriber subscribers remove subscriber public void publish Publisher pub new NewspaperPublisher for Subscriber subscriber subscribers subscriber receive pub xinetxrefs Subscriber public interface Subscriber public void receive Publisher publication khlas Reader public class Reader implements Subscriber private String name public Reader String name this name name public void receive Publisher publication System out println name received publication kareriykichngan public class PublishSubscribeTest public static void main String args Reader reader1 new Reader reader 1 Reader reader2 new Reader reader 2 Publisher publisher new NewspaperPublisher publisher subscribe reader1 publisher subscribe reader2 publisher publish phlkarrn reader 1 received NewspaperPublisher 6b97fd reader 2 received NewspaperPublisher 6b97fdxangxing aekikhDesign Patterns Elements of Reusable Object Oriented Software ISBN 0 201 63361 2 ody Erich Gamma Richard Helm Ralph Johnson aela John Vlissides Gang of four GoF aehlngkhxmulxun aekikhAn inside view of Observer Archived 2007 02 07 thi ewyaebkaemchchin ody David Geary xngkvs ekhathungcak https th wikipedia org w index php title xxbesirfewxraephtethirn amp oldid 9676381, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม