Implementasi Strategy Pattern pada Laravel

Andruw
3 min readDec 15, 2023

--

Konsep dasar dan implementasi pada PHP/Laravel

Photo by Artem Beliaikin on Unsplash

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 :

  1. 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 :

Strategy Pattern Diagram

Contoh Implementasi dalam bahasa PHP adalah sebagai berikut :

Kelebihan

  1. Algoritma yang digunakan dalam objek bisa diganti pada saat runtime
  2. Mengisolasi detail implementasi algoritma dari koding yang menggunakannya.
  3. Bisa menerapkan open/close principle karena strategi baru bisa ditambahkan tanpa perlu mengubah Context

Kekurangan

  1. Jika algoritma yang digunakan hanya memiliki sedikit variasi, maka koding yang dibuat justru akan terlalu rumit.
  2. Client atau koding yang menggunakan strategi harus tahu perbedaan dari setiap strategi agar bisa memilih yang sesuai.

Penggunaan

  1. Bisa digunakan ketika diperlukan untuk menggunakan berbagai variasi algoritma dan algoritmanya perlu bisa diubah selama runtime.
  2. Bisa digunakan ketika memiliki banyak class yang mirip dalam hal input dan output tapi sedikit berbeda dalam pemrosesannya.
  3. 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

  1. 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.

Baca Lebih Lanjut

  1. Refactoring Guru - Behavioral Design Pattern
  2. Refactoring Guru - Strategy Design Pattern
  3. Laravel - Service Container
  4. Laravel - Service Provider

--

--

Andruw
Andruw

Written by Andruw

PHP/Laravel Developer | Web Tech Enthusiast

No responses yet