{"id":30,"date":"2026-05-18T09:25:27","date_gmt":"2026-05-18T09:25:27","guid":{"rendered":"https:\/\/socs.binus.ac.id\/computer-science\/?p=30"},"modified":"2026-07-14T14:52:02","modified_gmt":"2026-07-14T14:52:02","slug":"article-1","status":"publish","type":"post","link":"https:\/\/socs.binus.ac.id\/computer-science\/2026\/05\/18\/article-1\/","title":{"rendered":"State vs Strategy Design Pattern"},"content":{"rendered":"<p><span style=\"font-family: inherit\" data-contrast=\"auto\">Dalam pengembangan\u00a0<\/span><i style=\"font-family: inherit\"><span data-contrast=\"auto\">software<\/span><\/i><span style=\"font-family: inherit\" data-contrast=\"auto\">, <em>State Pattern<\/em> dan <em>Strategy Pattern<\/em> kerap kali membingungkan karena strukturnya yang hampir mirip. Namun, pada penerapannya kedua <em>design pattern<\/em>\u00a0ini\u00a0memiliki\u00a0tujuan\u00a0dan\u00a0implementasi\u00a0yang sangat\u00a0berbeda.\u00a0<\/span><span style=\"font-family: inherit\" data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Apa\u00a0persamaannya?<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Baik <em>State Pattern<\/em> dan <em>Strategy Pattern<\/em>\u00a0merupakan<\/span><i><span data-contrast=\"auto\"> behavioral design patterns <\/span><\/i><span data-contrast=\"auto\">dengan\u00a0prinsip\u00a0sebagai\u00a0berikut:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ol>\n<li data-leveltext=\"%1.\" data-font=\"\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Dibandikan\u00a0melakukan\u00a0<\/span><i><span data-contrast=\"auto\">inheritance<\/span><\/i><span data-contrast=\"auto\">\u00a0untuk\u00a0menambahkan\u00a0method\u00a0baru,\u00a0kita\u00a0melakukan\u00a0<\/span><i><span data-contrast=\"auto\">composition.\u00a0<\/span><\/i><span data-contrast=\"auto\">Yaitu\u00a0membuat\u00a0sebuah\u00a0<\/span><i><span data-contrast=\"auto\">class\u00a0<\/span><\/i><span data-contrast=\"auto\">baru\u00a0yang\u00a0mengimplemtasikan\u00a0sebuah\u00a0<\/span><i><span data-contrast=\"auto\">interface\u00a0<\/span><\/i><span data-contrast=\"auto\">lalu\u00a0menyimpannya\u00a0di main\u00a0<\/span><i><span data-contrast=\"auto\">class.<\/span><\/i><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"%1.\" data-font=\"\" data-listid=\"1\" data-list-defn-props=\"{&quot;335552541&quot;:0,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769242&quot;:[65533,0],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;%1.&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Memisahkan logika bisnis dari <\/span><i><span data-contrast=\"auto\">context<\/span><\/i><span data-contrast=\"auto\">\u00a0ke\u00a0suatu\u00a0<\/span><i><span data-contrast=\"auto\">class\u00a0terpisah<\/span><\/i><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/li>\n<\/ol>\n<p><b><span data-contrast=\"auto\">Lalu,\u00a0apa\u00a0perbedaannya?<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">State Pattern<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">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 -&gt; <\/span><span data-contrast=\"auto\">review -&gt; <\/span><span data-contrast=\"auto\">\u00a0publish) atau lampu lalu lintas yang dapat berganti warna (merah -&gt;<\/span><span data-contrast=\"auto\"> kuning -&gt; <\/span><span data-contrast=\"auto\">hijau).<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\"><em>State pattern\u00a0<\/em>cocok digunakan apabila perilaku objek perlu berubah secara dinamis berdasarkan kondisi internal, seperti proses <em>workflow<\/em>,\u00a0atau\u00a0animasi\u00a0karakter\u00a0game.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;335551550&quot;:2,&quot;335551620&quot;:2}\"> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-617\" src=\"https:\/\/socs.binus.ac.id\/computer-science\/wp-content\/uploads\/sites\/8\/2026\/05\/Screenshot-2026-07-14-at-8.59.39\u202fPM.png\" alt=\"\" width=\"760\" height=\"472\" \/><\/span><\/p>\n<p><span data-contrast=\"auto\">Contoh\u00a0<em>Code<\/em>:<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Perhatikan\u00a0<em>code<\/em> salah\u00a0<em>state<\/em>\u00a0<em>Draft<\/em> di\u00a0bawah\u00a0ini.\u00a0<em>State <\/em>yang mengatur transisi\/perpindahan ke <em>state<\/em> berikutnya.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\"> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-618\" src=\"https:\/\/socs.binus.ac.id\/computer-science\/wp-content\/uploads\/sites\/8\/2026\/05\/Screenshot-2026-07-14-at-9.00.21\u202fPM.png\" alt=\"\" width=\"1180\" height=\"236\" \/><\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Strategy\u00a0Pattern<\/span><\/b><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\"><em>Strategy pattern<\/em>\u00a0memungkinkan\u00a0<\/span><i><span data-contrast=\"auto\">client<\/span><\/i><span data-contrast=\"auto\"> 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. <\/span><i><span data-contrast=\"auto\">Client<\/span><\/i><span data-contrast=\"auto\"> dapat memilih untuk menggunakan metode kredit, debit, atau kripto. <em>Strategy pattern <\/em>cocok digunakan apabila program yang ingin kita bangun terfokus pada\u202ffleksibilitas pemilihan algoritma\u202feksternal.<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;335551550&quot;:2,&quot;335551620&quot;:2}\"> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-619\" src=\"https:\/\/socs.binus.ac.id\/computer-science\/wp-content\/uploads\/sites\/8\/2026\/05\/Screenshot-2026-07-14-at-9.01.03\u202fPM.png\" alt=\"\" width=\"828\" height=\"414\" \/><\/span><\/p>\n<p><span data-contrast=\"auto\">Contoh\u00a0<em>code<\/em>:<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Perhatikan\u00a0<em>code<\/em> di\u00a0bawah.\u00a0<\/span><span data-contrast=\"auto\"><em>Client<\/em>\u00a0dapat\u00a0memilih\u00a0<em>Strategy<\/em>\u00a0secara\u00a0langsung.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{}\"> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-620\" src=\"https:\/\/socs.binus.ac.id\/computer-science\/wp-content\/uploads\/sites\/8\/2026\/05\/Screenshot-2026-07-14-at-9.01.47\u202fPM.png\" alt=\"\" width=\"2338\" height=\"820\" \/><\/span><\/p>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Kesimpulan<\/span><\/b><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Keduanya\u00a0sangat\u00a0powerful\u00a0dalam\u00a0pengembangan\u00a0program,\u00a0namun\u00a0kita\u00a0harus\u00a0menyesuaikan\u00a0dengan\u202f<\/span><b><span data-contrast=\"auto\">konteks\u00a0masalah<\/span><\/b><span data-contrast=\"auto\">\u202funtuk\u00a0menentukan\u00a0pattern\u00a0mana yang\u00a0tepat.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">State Pattern<\/span><\/b><span data-contrast=\"auto\">\u202fberfokus\u00a0pada\u202f<\/span><b><span data-contrast=\"auto\">perubahan\u00a0status\u00a0internal<\/span><\/b><span data-contrast=\"auto\">\u202fakibat\u00a0transisi\u00a0status.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"4\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"auto\">Strategy Pattern<\/span><\/b><span data-contrast=\"auto\">\u202fberfokus\u00a0pada\u202f<\/span><b><span data-contrast=\"auto\">fleksibilitas\u00a0pemilihan\u00a0algoritma<\/span><\/b><span data-contrast=\"auto\">\u202feksternal.<\/span><span data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Refrensi:<\/span><span data-ccp-props=\"{}\">\u00a0<\/span><\/p>\n<ol>\n<li><a href=\"https:\/\/refactoring.guru\/design-patterns\/state\"><span data-contrast=\"none\">https:\/\/refactoring.guru\/design-patterns\/state<\/span><\/a><\/li>\n<li><a style=\"font-family: inherit\" href=\"https:\/\/refactoring.guru\/design-patterns\/strategy\"><span data-contrast=\"none\">https:\/\/refactoring.guru\/design-patterns\/strategy<\/span><\/a><\/li>\n<li>Gamma, E. (1995).\u202f<i style=\"font-family: inherit\"><span data-contrast=\"auto\">Design patterns: elements of reusable object-oriented software<\/span><\/i><span style=\"font-family: inherit\" data-contrast=\"auto\">. Pearson Education India.<\/span><span style=\"font-family: inherit\" data-ccp-props=\"{&quot;335559739&quot;:0}\">\u00a0<\/span><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Dalam pengembangan\u00a0software, State Pattern dan Strategy Pattern kerap kali membingungkan karena strukturnya yang hampir mirip. Namun, pada penerapannya kedua design pattern\u00a0ini\u00a0memiliki\u00a0tujuan\u00a0dan\u00a0implementasi\u00a0yang sangat\u00a0berbeda.\u00a0\u00a0 Apa\u00a0persamaannya?\u00a0 Baik State Pattern dan Strategy Pattern\u00a0merupakan behavioral design patterns dengan\u00a0prinsip\u00a0sebagai\u00a0berikut:\u00a0 Dibandikan\u00a0melakukan\u00a0inheritance\u00a0untuk\u00a0menambahkan\u00a0method\u00a0baru,\u00a0kita\u00a0melakukan\u00a0composition.\u00a0Yaitu\u00a0membuat\u00a0sebuah\u00a0class\u00a0baru\u00a0yang\u00a0mengimplemtasikan\u00a0sebuah\u00a0interface\u00a0lalu\u00a0menyimpannya\u00a0di main\u00a0class.\u00a0 Memisahkan logika bisnis dari context\u00a0ke\u00a0suatu\u00a0class\u00a0terpisah.\u00a0 Lalu,\u00a0apa\u00a0perbedaannya?\u00a0 State Pattern\u00a0 State pattern memungkinkan objek mengubah perilakunya secara dinamis ketika status internalnya berubah. [&hellip;]<\/p>\n","protected":false},"author":712,"featured_media":616,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-30","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles"],"_links":{"self":[{"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/posts\/30","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/users\/712"}],"replies":[{"embeddable":true,"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/comments?post=30"}],"version-history":[{"count":7,"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/posts\/30\/revisions"}],"predecessor-version":[{"id":639,"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/posts\/30\/revisions\/639"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/media\/616"}],"wp:attachment":[{"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/media?parent=30"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/categories?post=30"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/socs.binus.ac.id\/computer-science\/wp-json\/wp\/v2\/tags?post=30"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}