แบบแผนการออกแบบซอฟต์แวร์

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

 จุดเริ่มต้น 
แบบแผนการออกแบบมีจุดเริ่มต้นจากหนังสือชื่อ A Pattern Language: Towns, Buildings, Construction แต่งโดยสถาปนิกชื่อ Christopher Alexander เมื่อปี ค.ศ. 1977 จากนั้น Kent Beck และ Ward Cunningham ริเริ่มนำเอาแนวคิดนี้มาทดลองใช้กับการเขียนโปรแกรมในปี ค.ศ. 1987 และได้นำเสนอผลงานในงานประชุม OOPSLA ในปีเดียวกันนั้น

แบบแผนการออกแบบเริ่มเป็นที่นิยมในวงการวิทยาการคอมพิวเตอร์ในปี ค.ศ. 1994 หลังจากมีหนังสือที่แต่งโดย Erich Gamma, Richard Helm, Ralph Johnson และ John Vlissides (Gang of four: GoF) ชื่อ Design Patterns: Elements of Reusable Object-Oriented Software (ISBN 0-201-63361-2)

 ประโยชน์ 

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

 การจัดหมวดหมู่และแบบแผนในหนังสือ Design Patterns 

การจัดหมวดหมู่แบบแผนการออกแบบซอฟต์แวร์ตามหนังสือ Design Patterns แบ่งตามวัตถุประสงค์การใช้งาน ดังนี้

 แบบแผนการสร้างอ็อบเจกต์ (creational patterns) 
 Abstract Factory
 Builder
 Factory Method
 Prototype
 Singleton

 แบบแผนโครงสร้าง (structural patterns) 
 Adapter
 Bridge
 Composite
 Decorator
 Façade
 Flyweight
 Proxy

 แบบแผนพฤติกรรม (behavioral patterns) 
 Chain of responsibility
 Command
 Interpreter
 Iterator
 Mediator
 Memento
 Observer
 State
 Strategy
 Template method
 Visitor

 หมวดหมู่แบบแผนการออกแบบซอฟต์แวร์อื่น ๆ 
 concurrency patterns
 architectural patterns

 ดูเพิ่ม 
 การเขียนโปรแกรมเชิงวัตถุ
 ยูเอ็มแอล
 ภาษาจาวา

หมวดหมู่:การเขียนโปรแกรม