Pola desain (design pattern) dalam rekayasa perangkat lunak (software engineering) adalah sebuah solusi umum yang dapat digunakan kembali (reusable solution) untuk masalah umum (common problem) dalam konteks tertentu dalam desain perangkat lunak (software design). Ini bukan merupakan desain jadi yang langsung bisa dirubah menjadi kode, melainkan sebuah template tentang cara memecahkan masalah yang dapat digunakan dalam situasi yang berbeda.
Design pattern biasanya dibagi menjadi tiga kategori utama :
1. Pola Penciptaan (Creational Patterns)
Berfokus pada mekanisme penciptaan objek, mencoba menciptakan sebuah objek dengan cara yang sesuai dengan situasi.
Contoh : Singleton, Factory Method, Builder, Prototype, dll.
2. Pola Struktural (Structural Patterns)
Berfokus pada komposisi objek, biasanya untuk membuat struktur yang lebih besar dari objek individual.
Contoh : Adaptor, Decorator, Facade, Proxy, dll.
3. Pola Perilaku (Behavioral Patterns)
Berfokus pada komunikasi antar objek, yaitu bagaimana mereka berinteraksi dan mendistribusikan tanggung jawab.
Contoh : Observer, Strategy, Command, State, dll.
Pola desain menyediakan terminologi standar dan khusus untuk scenario tertentu. Pola desain membantu keterbacaan kode dan mengurangi kompleksitas pengembangan perangkat lunak dengan menyediakan solusi yang telah teruji untuk masalah umum. Selain itu, pola desain mempromosikan praktik terbaik dan memfasilitasi komunikasi antar pengembang, karena pola desain menyediakan bahasa umum saat membahas solusi.