Dalam pengembangan software, State Pattern dan Strategy Pattern kerap kali membingungkan karena strukturnya yang hampir mirip. Namun, pada penerapannya kedua design pattern ini memiliki tujuan dan implementasi yang sangat berbeda.  

Apa persamaannya? 

Baik State Pattern dan Strategy Pattern merupakan behavioral design patterns dengan prinsip sebagai berikut: 

  1. Dibandikan melakukan inheritance untuk menambahkan method baru, kita melakukan composition. Yaitu membuat sebuah class baru yang mengimplemtasikan sebuah interface lalu menyimpannya di main class. 
  2. Memisahkan logika bisnis dari context ke suatu class terpisah. 

Lalu, apa perbedaannya? 

State Pattern 

State pattern memungkinkan objek mengubah perilakunya secara dinamis ketika status internalnya berubah. Perubahan state tersebut dikelola oleh context itu sendiri. Contohnya adalah proses review dokumen yang dapat berganti status secara otomatis (draft -> review ->  publish) atau lampu lalu lintas yang dapat berganti warna (merah -> kuning -> hijau). 

State pattern cocok digunakan apabila perilaku objek perlu berubah secara dinamis berdasarkan kondisi internal, seperti proses workflow, atau animasi karakter game. 

Contoh Code: 

Perhatikan code salah state Draft di bawah ini. State yang mengatur transisi/perpindahan ke state berikutnya. 

 

Strategy Pattern 

Strategy pattern memungkinkan client untuk memilih status yang diinginkan. Contohnya adalah perjalanan ke suatu tempat, maka client dapat memilih rute menggunakan motor/mobil/kereta. Contoh lainnya adalah proses pembayaran. Client dapat memilih untuk menggunakan metode kredit, debit, atau kripto. Strategy pattern cocok digunakan apabila program yang ingin kita bangun terfokus pada fleksibilitas pemilihan algoritma eksternal. 

Contoh code: 

Perhatikan code di bawah. Client dapat memilih Strategy secara langsung. 

 

Kesimpulan 

Keduanya sangat powerful dalam pengembangan program, namun kita harus menyesuaikan dengan konteks masalah untuk menentukan pattern mana yang tepat. 

  • State Pattern berfokus pada perubahan status internal akibat transisi status. 
  • Strategy Pattern berfokus pada fleksibilitas pemilihan algoritma eksternal. 

 

Refrensi: 

  1. https://refactoring.guru/design-patterns/state
  2. https://refactoring.guru/design-patterns/strategy
  3. Gamma, E. (1995). Design patterns: elements of reusable object-oriented software. Pearson Education India.