Konsep dasar dan implementasi pada PHP/Laravel
Strategy pattern adalah design pattern yang bisa digunakan untuk mengelompokan beberapa variasi algoritma dengan input dan output yang sama, namun memiliki alur pemrosesan yang berbeda. Setiap algoritma yang berbeda disebut sebagai strategi yang bisa diubah sesuai kebutuhan ketika runtime.
Pengenalan
Pengertian
Strategy design pattern adalah salah satu design pattern yang masuk ke dalam jenis behavioral design pattern. Behavioral design pattern adalah design pattern yang fokus utamanya adalah pada algoritma dan penugasan tanggung jawab pada setiap object.
Strategy bisa gunakan untuk mendefinisikan keluarga dari algoritma dan meletakannya pada class yang terpisah dan membuat object-nya bisa dipertukarkan.
Struktur
Implementasi Strategy pattern membutuhkan Strategy class, Context class dan Interface.
Berikut adalah peranan dari setiap komponen yang diperlukan :
- Context
Berfungsi sebagai penghubung yang akan menghubungan client dengan concrete strategy melalui interface.
2. Interface
Interface digunakan untuk mendeklarasikan method yang diperlukan untuk ada dalam strategy class yang akan dipanggil melalui context class
3. Concrete Strategy (strategy class)
Memuat implementasi berbagai variasi dari algoritma yang akan dieksekusi melalui context class.
4. Client
Bagian kode yang akan menggunakan Strategi, dengan cara membuat instante dari context class, memilih strategi lalu mengeksekusi algoritma.
Berikut adalah class diagram dari Strategy Pattern :
Contoh Implementasi dalam bahasa PHP adalah sebagai berikut :
Kelebihan
- Algoritma yang digunakan dalam objek bisa diganti pada saat runtime
- Mengisolasi detail implementasi algoritma dari koding yang menggunakannya.
- Bisa menerapkan open/close principle karena strategi baru bisa ditambahkan tanpa perlu mengubah Context
Kekurangan
- Jika algoritma yang digunakan hanya memiliki sedikit variasi, maka koding yang dibuat justru akan terlalu rumit.
- Client atau koding yang menggunakan strategi harus tahu perbedaan dari setiap strategi agar bisa memilih yang sesuai.
Penggunaan
- Bisa digunakan ketika diperlukan untuk menggunakan berbagai variasi algoritma dan algoritmanya perlu bisa diubah selama runtime.
- Bisa digunakan ketika memiliki banyak class yang mirip dalam hal input dan output tapi sedikit berbeda dalam pemrosesannya.
- Bisa digunakan ketika sebuah class memiliki banyak conditional statement yang menggunakan berbagai variasi algoritma.
Implementasi
Dependency Injection
Untuk membuat sebuah objek dari class ketika class tersebut dibutuhkan pada class lainnya, dilakukan dengan cara dependency injection (DI). Interface digunakan sebagai abstraction dan class sebagai concrete implementation. Ketika menggunakan strategy pattern, binding dari class dan interface bisa diubah sewaktu - waktu ketika runtime.
Code Example
- Interface
Interface berfungsi sebagai abstraction dari class.
2. Strategy Class
Class yang berisi strategi (algoritma) variasi pertama
Class yang berisi strategi (algoritma) variasi kedua
3. Service Provider
Service Provider untuk melakukan konfigurasi binding.
4. App Config
Setelah dibuat, Service Provider perlu didaftarkan pada app config.
5. Controller
Contoh penggunaan Strategy class.
Penutup
Kata Penutup
Strategy Pattern adalah design pattern yang bisa diterapkan ketika terdapat beberapa algoritma yang memiliki kemiripan. Selain itu juga diperlukan untuk bisa mengganti algoritma yang ada pada saat runtime. Semoga tulisan kali ini bermanfaat. Sampai jumpa di tulisan selanjutnya. Salam.