ฉันรู้สึกสนุกนิดหน่อยที่คำตอบทั้งหมดที่นี่พยายามอธิบายความแตกต่างเล็กน้อยระหว่างรูปแบบผู้สังเกตการณ์และผับ / ซับโดยไม่ให้ตัวอย่างที่เป็นรูปธรรมใด ๆ ฉันพนันได้ว่าผู้อ่านส่วนใหญ่ยังไม่รู้ว่าจะใช้งานกันอย่างไรโดยการอ่านอันใดอันหนึ่งเป็นแบบซิงโครนัสและอีกแบบหนึ่งแบบอะซิงโครนัส
สิ่งหนึ่งที่ควรทราบคือ: เป้าหมายของรูปแบบเหล่านี้คือพยายามแยกโค้ดออก
Observer เป็นรูปแบบการออกแบบที่วัตถุ (เรียกว่าเรื่อง) รักษารายการของวัตถุขึ้นอยู่กับมัน (ผู้สังเกตการณ์) โดยอัตโนมัติแจ้งให้พวกเขาทราบถึงการเปลี่ยนแปลงใด ๆ ในสถานะ
รูปแบบการสังเกตการณ์
นี่หมายถึงการobservable object
มีรายการที่มันเก็บทั้งหมดobservers
(ซึ่งมักจะมีฟังก์ชั่น) และสามารถข้ามรายการนี้และเรียกใช้ฟังก์ชันเหล่านี้เมื่อรู้สึกดี
ดูตัวอย่างรูปแบบของผู้สังเกตการณ์นี้เพื่อดูรายละเอียด
รูปแบบนี้ดีเมื่อคุณต้องการฟังการเปลี่ยนแปลงข้อมูลใด ๆ บนวัตถุและอัปเดตมุมมอง UI อื่น ๆ ตามลำดับ
แต่จุดด้อยคือสิ่งที่สังเกตได้มีเพียงหนึ่งอาร์เรย์ในการรักษาผู้สังเกตการณ์
(ในตัวอย่างคืออาร์เรย์observersList
)
มันไม่ได้แยกความแตกต่างว่ามีการเรียกใช้การปรับปรุงอย่างไรเนื่องจากมีเพียงหนึ่งnotify function
ฟังก์ชันเท่านั้นซึ่งจะเรียกใช้ฟังก์ชันทั้งหมดที่เก็บไว้ในอาร์เรย์นั้น
ถ้าเราต้องการจัดกลุ่มตัวจัดการผู้สังเกตการณ์ตามเหตุการณ์ต่าง ๆ เราแค่ต้องปรับเปลี่ยนสิ่งนั้นobserversList
ให้Object
เหมือนกัน
var events = {
"event1": [handler1, handler2],
"event2": [handler3]
}
ดูตัวอย่าง pubsub นี้เพื่อดูรายละเอียด
pub/sub
และคนเรียกรูปแบบนี้เป็น ดังนั้นคุณสามารถเรียกใช้ฟังก์ชั่นต่าง ๆ ตามที่events
คุณเผยแพร่