จากรูปแบบทั้ง 6 ที่ใช้ในการออกแบบขั้นพื้นฐานยังไม่เพียงพอสำหรับการนำไปออกแบบระบบงานที่มีความซับซ้อนและต้องการความยืดหยุ่นสูง ระบบงานที่ดีจะต้องง่ายต่อการปรับเปลี่ยนไปตามความต้องการที่เกิดขึ้นใหม่ ๆ  ของผู้ใช้ระบบ การเพิ่มคุณลักษณะใหม่เข้าไปในระบบจะต้องสามารถทำได้ง่าย เหมือนกับการถอดประกอบชิ้นส่วนในผลิตภัณฑ์อื่น ๆ

ในหัวข้อนี้จะนำเสนอรูปแบบ 23 แบบ ที่เป็นนิยมนำมาออกแบบซอฟแวร์ โดยทั้ง 23 แบบนี้ถูกรวบรวมไว้ครั้งแรกในหนังสือ The Reusable of Software Design Pattern ซึ่งเขียนโดย GoF[1] และตีพิมพ์เผยแพร่เมื่อปี 1995 จนกระทั่งถึงปัจจุบันจะพบว่าเฟรมเวิร์ค[2]เกือบทั้งหมดมีการนำหลักการของ Design Pattern เข้าไปร่วมด้วยไม่มากก็น้อย

ตารางที่ 2 รูปแบบทั้ง 23 แบบของ GoF

PatternIntent
1.    Abstract FactoryInterface สำหรับสร้าง Product ที่อยู่ในตระกูลเดียวกัน โดยที่ Client ไม่จำเป็นต้องรู้ว่ากระบวนการสร้างเป็นอย่างไร และ Product ในตระกูลทำงานร่วมกัน
2.    Builderแยกกระบวนการสร้างวัตถุที่มีโครงสร้างซับซ้อน ออกจากส่วนแสดงผลเพื่อที่จะใช้กระบวนการสร้างแบบเดียวกันนี้ได้กับการแสดงผลหลายแบบ
3.    Factory Methodสร้าง Framework สำหรับให้ Subclass มา Override เพื่อสร้างวัตถุที่ต้องการ
4.    Prototypeสร้าง Object ขึ้นมาใหม่โดย Copy จากตัวที่ใช้เป็นแม่แบบอยู่แล้ว
5.    Singletonต้องการควบคุมให้มี Object เพียงตัวเดียวเท่านั้นตลอดการใช้งาน
6.    Adapterเชื่อมต่อเข้ากับอีกระบบที่มี Interface ไม่ตรงกัน โดยห่อหุ้ม (Wrap) อีกระบบหนึ่งด้วย Interface ที่ทำขึ้นมาใหม่ให้ตรงใจเรา
7.    Bridgeแยกส่วน Abstract ออกจากส่วน Implementation เพื่อที่สองส่วนนี้จะได้เปลี่ยนแปลงไปได้อย่างอิสระ
8.    Compositeสร้างโครงสร้างของ Object ในรูปแบบโครงสร้างแบบต้นไม้ (Tree)
9.    Decoratorต่อเติมส่วนประกอบของ Object ในขณะ Runtime โดยไม่จำเป็นต้อง Subclass แล้ว Override
10.  Façadeรวบรวมการสั่งงานทั้งระบบมาไว้ที่ Interface เดียวกัน เพื่อให้ใช้ระบบได้ง่าย
11.  Flyweightเมื่อต้องรับมือกับ Object จำนวนมหาศาล
12.  Proxyเมื่อต้องการป้องกันการเข้าถึงตัว Object โดยแทรกงานบางอย่างเข้าไปก่อน
13.  Chain of Responsibilityส่งงานให้กับ Object ทุกตัวที่อยู่ในสายงาน จนกว่าจะมีตัวใดตัวหนึ่งช่วยทำจนเสร็จ
14.  Commandทำให้คำสั่งงานเป็น Object เพื่อที่จะได้เก็บไว้ในคิวงานหรือ Undo ได้
15.  Interpreterสร้างไวยากรณ์ภาษาขึ้นใช้เองในแอพพลิเคชัน
16.  Iteratorเข้าถึง Object ทุกตัวที่อยู่ในกลุ่ม โดยที่ไม่จำเป็นต้องรู้โครงสร้างภายใน
17.  Mediatorเป็นคนกลางคอยรับส่งงานให้กับ Object ที่อยู่ในกลุ่ม โดยไม่ต้องให้ Object เหล่านั้นเชื่อมต่อกันโดยตรง
18.  Mementoทำให้ Object สามารถคืนสู่สภาพเดิมได้
19.  Observerเมื่อ Object มีการเปลี่ยนแปลง ทุกตัวที่สังเกตการณ์อยู่จะได้รับสัญญาณ
20.  Stateเมื่อ Object เปลี่ยนสถานะ ทำให้มีการกระทำที่แตกต่างกันออกไป
21.  Strategyกลุ่มของ Algorithm ที่สามารถสลับสับเปลี่ยนได้ในขณะ Runtime
22.  Template Methodขั้นตอนการทำงานอยู่ใน Method ของคลาสแม่ แต่วิธีทำในแต่ละขั้นตอนอยู่ในคลาสลูก
23.  Visitorแยกกระบวนการที่ต้องทำกับ Object ทุกตัวในโครงสร้างออกมาเพื่อให้สามารถเพิ่มกระบวนการใหม่ ๆ  ให้กับ Object ในโครงสร้างได้โดยที่ไม่กระทบโครงสร้าง

ทั้ง 23 แบบนี้จะถูกแบ่งออกเป็น 3 กลุ่มเพื่อใช้สำหรับแก้ปัญหาหลักในการออกแบบ 3 อย่าง คือ

1.    Creational Pattern    ใช้สำหรับแก้ปัญหาการสร้างวัตถุว่าทำอย่างไรจึงจะสามารถจัดรูปแบบการสร้างวัตถุให้อยู่ในแบบที่ง่ายต่อการเปลี่ยนแปลง เมื่อมีวัตถุชนิดใหม่เกิดขึ้นในอนาคตเราจะต้องเปลี่ยนแปลงน้อยที่สุด แต่สามารถนำระบบไปใช้ต่อได้ทันที

2.    Structural Pattern     ใช้สำหรับแก้ปัญหาการจัดวางโครงสร้างและองค์ประกอบของวัตถุ เพื่อให้วัตถุมาประกอบต่อกันด้วยโครงสร้างที่ง่ายต่อการเปลี่ยนแปลงในอนาคต เปรียบเสมือนกับการเสียบปลั๊กไฟ หรือการถอดชิ้นส่วนในอุปกรณ์ไฟฟ้า ซึ่งจะต้องมีโครงสร้างยืดหยุ่นพอที่จะถอดประกอบได้ตลอดเวลา

3.    Behavioral Pattern   ใช้สำหรับแก้ปัญหาการแปรเปลี่ยนการทำงานของวัตถุ เพื่อให้วัตถุสามารถทำงานที่แตกต่างกันในสภาวะแวดล้อมที่แตกต่างกันได้ ในอนาคตโดยไม่ต้องเปลี่ยนแปลงส่วนการทำงานหลักของวัตถุ นอกจากนั้นยังใช้สำหรับแก้ปัญหาการใช้เงื่อนไขในโปรแกรมที่สลับซับซ้อนจนยากต่อการถอดประกอบ เมื่อใช้รูปแบบในกลุ่มนี้จะช่วยลดความซับซ้อนและเพิ่มความเป็นระเบียบแบบแผนให้กับการทำงานของวัตถุได้

รูปภาพ 33 ตัวอย่างการใช้รูปแบบ Abstract Factory และ Factory Method ใน Java Messaging Service

ตารางที่ 3 ประเภทของ Design Pattern ทั้ง 3 ประเภทแยกตามรูปแบบการนำไปแก้ปัญหา

Creational PatternStructural PatternBehavioral Pattern
Abstract Factory Builder Factory Method Prototype SingletonComposite Bridge Adapter Decorator Flyweight Proxy FaçadeObserver Mediator Visitor Iterator Memento Strategy State Template Method Chain of Responsibility Interpreter Command

[1] GoF ย่อมาจาก Gang of Four นำทีมโดย Eric Gamma

[2] เช่น Java 2 Standard Edition, Java 2 Enterprise Edition, .NET Framework หรือแม้แต่แอพพลิเคชันทางธุรกิจทั่วๆไป

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *