Composite Pattern UML |
จากในภาพจะเห็นว่า Leaf (Leaf Node) และ Composite (Branch Node) มีการ implement method ที่ชื่อว่า operation() เหมือนกัน เนื่องจากมีการ inherit มาจาก Parent เดียวกันก็คือ Component ในขณะเดียวกัน Composite ยังสามารถที่จะมี Child Object ที่ inherit มาจาก Component อยู่ภายในตัวเอง (ซึ่งจุดนี้เองที่ทำให้ Branch Node แตกต่างจาก Leaf Node แต่ยังคงคล้ายกัน เนื่องจากมี method ชื่อว่า operation() เหมือนกัน) สิ่งที่เพิ่มเข้ามาใน Composite (Branch Node) ก็คือ method สำหรับการทำงานกับ Child Object อย่างเช่น add(), remove() และ getChild()
Key Concept ของ Composite Pattern ก็คือ เราสามารถใช้งาน Single Object (Leaf) หรือ Group of Object (Branch) ได้ในแบบเดียวกัน ซึ่งจากในภาพ ก็คือเราสามารถ เรียก method ที่ชื่อว่า operation() ได้ทั้งจาก Leaf หรือ Composite (Branch Node) เดี๋ยวเราจะลองมาดู Source Code เพื่อจะได้เข้าใจมากขึ้น ซึ่ง Code ตัวอย่างที่จะแสดงดังต่อไปนี้ เป็นการ implement Graphic Class ในภาษา Java
จาก Code ข้างต้น เราจะเห็นว่า เราสามารถเรียก print() ผ่าน CompositeGraphic ได้ ไม่แตกต่างจากการเรียกจาก Ellipse ซึ่งการเรียก print() ผ่าน CompositeGraphic มีผลทำให้ print() ที่อยู่ใน Child Object ถูกเรียก ดังนั้นถ้าหากเราต้องการเรียก print() ของทุกๆ Graphic Object แทนที่เราจะสั่งเรียกทีละตัว เราก็จะสามารถเรียกผ่าน CompositeGraphic แทนได้ ก็ลองเอาไปประยุกต์ใช้งานดูละกันนะครับ
แหล่งที่มา: http://en.wikipedia.org/wiki/Composite_pattern
No comments:
Post a Comment