รูปแบบการออกแบบของผู้สังเกตการณ์กับ“ ผู้ฟัง”


136

สำหรับฉันแล้วรูปแบบการออกแบบของ Observer ดังที่อธิบายไว้ใน GOF นั้นเป็นสิ่งเดียวกับที่ฟังในชุดเครื่องมือต่างๆ มีความแตกต่างระหว่างแนวคิดหรือเป็น Listeners และ Observers จริงๆในสิ่งเดียวกัน

(ฉันไม่ได้มองหาการใช้ภาษาคอมพิวเตอร์เฉพาะเจาะจงฉันแค่ต้องการเข้าใจความแตกต่าง (ถ้ามี) จากมุมมองของการออกแบบใช่ฉันรู้ว่ามีคำตอบมากมายสำหรับคำถามที่คล้ายกันใน SOF แต่พวกเขาหยั่งราก ในคำถามเฉพาะเกี่ยวกับภาษาเฉพาะ - ฉันกำลังมองหาคำตอบการออกแบบไม่ใช่คำตอบภาษา)


19
ในอดีตหนึ่งรหัสเฝ้าดูรหัสอื่น ๆ สำหรับการเคลื่อนไหวในขณะที่ในหลังหนึ่งรหัสฟังรหัสอื่น ๆ สำหรับเสียงใด ๆ
c

2
GOF หมายถึงอะไร
dekaru

คำตอบ:


60

ไม่ว่าจะเป็นคำว่า "ฟัง" หมายถึงรูปแบบการสังเกตการณ์หรือไม่จะขึ้นอยู่กับบริบท ตัวอย่างเช่น "Event Listeners" ของ Java Swing เป็นส่วนหนึ่งของการใช้รูปแบบ Observer ในขณะที่. Net "Trace Listeners" ไม่ใช่

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

เกี่ยวกับการออกแบบการใช้รูปแบบที่กำหนดมักจะได้รับอิทธิพลจากภาษาและแพลตฟอร์มที่ใช้ ดังนั้นการใช้รูปแบบการสังเกตการณ์โดยเฉพาะภายในกรอบงานที่กำหนด (ซึ่งอาจเกิดขึ้นเพื่อใช้คำว่า "ผู้ฟัง" เพื่ออธิบายบทบาทของ ConcreteObserver) อาจแตกต่างเล็กน้อยจากที่อธิบายไว้ในหนังสือรูปแบบการออกแบบ


26

มีลักษณะสองทางสำหรับคำอธิบายของนักสังเกตการณ์ในรูปแบบการออกแบบโดย Gamma และ อัล (GoF)

ในคำอธิบายของผู้สังเกตการณ์หนึ่งใน ConcreteObservers อาจส่งสัญญาณการเปลี่ยนแปลงเรื่องของมัน หัวเรื่องซึ่งมีรายการของ ConcreteObservers ทั้งหมดจากนั้นแจ้งรายการ ConcreteObservers ทั้งหมดรวมถึงผู้เสนอญัตติสำคัญแล้วตอบสนองตามความเหมาะสม

การใช้งานทั่วไปของ Listeners ดูเหมือนจะตอบสนองต่อเหตุการณ์จากภายนอกทั้งหมด

ดังนั้นฉันจะบอกว่าผู้ฟังเป็นกรณีที่ไม่มีผู้สังเกตการณ์น้อยกว่า


4

ผู้ฟังอาจนำรูปแบบการสังเกตการณ์ไปใช้ ผู้ฟังกำลังรอเหตุการณ์ที่จะเกิดขึ้นบนวัตถุที่กำหนดซึ่งเป็นสิ่งที่ผู้สังเกตการณ์ทำ

ฉันรู้ว่าคุณไม่ได้อยู่หลังคำตอบเฉพาะทางภาษา แต่มันยากที่จะพูดถึงเรื่องนี้ในนามธรรม ดังนั้นถ้าฉันจะตรวจสอบเรื่องนี้ใน. NET ฉันจะโน้มน้าวให้เปิดแอสเซมบลีที่มีผู้ฟังใน. NET Reflector ซึ่งจะทำให้ฉันสามารถแยกแอสเซมบลีและตรวจสอบตรรกะกับรูปแบบการออกแบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.