Pengantar Pola Desain
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 70 dari 91.
Pola desain adalah solusi teruji untuk masalah umum yang berulang kali dihadapi developer saat membangun perangkat lunak. Daripada membuat solusi dari awal setiap kali, kamu bisa menerapkan templat yang sudah terbukti ini untuk mengatasi tantangan serupa dalam kodemu sendiri.
Anggap pola desain sebagai resep. Sama seperti koki mengikuti resep untuk membuat hidangan yang telah disempurnakan seiring waktu, developer menggunakan pola desain untuk menyusun kode mereka dengan cara yang telah diuji dan disempurnakan oleh banyak programmer sebelum mereka.
Pola desain biasanya dikelompokkan ke dalam tiga kategori:
| Kategori | Tujuan | Contoh |
|---|---|---|
| Kreasi | Cara object dibuat | Singleton, Factory |
| Struktural | Cara object disusun | Adapter, Decorator |
| Perilaku | Cara object berkomunikasi | Observer, Strategy |
Sebenarnya, kamu telah menggunakan pattern sepanjang kursus ini tanpa menyadarinya. Saat kamu membuat class abstrak dengan method yang harus diimplementasikan oleh child class, kamu menerapkan salah satu bentuk pattern Template Method. Saat kamu menggunakan interface untuk menentukan kontrak, kamu sedang menyiapkan pattern Strategy.
Mempelajari pola desain memberimu kosakata bersama dengan developer lain. Daripada menjelaskan struktur yang rumit secara terperinci, kamu cukup mengatakan "Saya menggunakan pola Factory di sini" dan developer berpengalaman akan langsung memahami pendekatanmu. Dalam pelajaran berikutnya, kita akan menerapkan beberapa pola penting di PHP.
Tantangan
MudahMari kita buat sistem pemformatan pesan sederhana yang menunjukkan bagaimana pola desain membantu menata kode. Kamu akan mengidentifikasi kategori pola yang menjadi bagian setiap komponen dan melihat bagaimana bagian-bagian berbeda dari sebuah sistem bekerja bersama.
Kamu akan menata kodemu dalam tiga file:
MessageFormatter.php: Buat interface bernamaMessageFormatteryang menetapkan kontrak untuk memformat pesan. Interface ini harus memiliki satu method, yaituformat(string $message): string. Ini mewakili kategori perilaku. Kategori ini menetapkan cara object berkomunikasi dan memproses data.Formatters.php: Sertakan file MessageFormatter dan buat dua class yang mengimplementasikan interface tersebut:UppercaseFormatter: Methodformat()-nya mengembalikan pesan yang diubah menjadi huruf kapitalBracketFormatter: Methodformat()-nya membungkus pesan dengan tanda kurung siku seperti[message]
main.php: Sertakan file Formatters. Kamu akan menerima dua input: string pesan dan tipe formatter ("upper"atau"bracket").Buat fungsi bernama
processMessageyang menerimaMessageFormatterdan string pesan, lalu mengembalikan hasil yang sudah diformat. Fungsi ini tidak perlu mengetahui formatter spesifik yang diterimanya. Fungsi ini cukup memanggilformat()pada object apa pun yang diberikan.Berdasarkan input tipe formatter, buat object formatter yang sesuai. Berikan object itu ke fungsi
processMessagebersama pesan, lalu cetak hasilnya.Pada baris baru, cetak kategori pola yang diwakili struktur ini. Karena kita mendefinisikan perilaku yang dapat saling menggantikan melalui sebuah interface, cetak:
Pattern category: Behavioral
Tantangan ini menunjukkan bagaimana interface memungkinkan kamu mengganti implementasi tanpa mengubah kode yang menggunakannya. Ini menjadi dasar untuk pola seperti Strategy yang akan kamu pelajari dalam pelajaran mendatang.
Coba sendiri
<?php
require_once 'Formatters.php';
// Baca input
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));
// TODO: Buat fungsi bernama processMessage yang menerima MessageFormatter
// dan string pesan, lalu mengembalikan hasil yang telah diformat
// TODO: Berdasarkan $formatterType ("upper" atau "bracket"), buat formatter yang sesuai
// TODO: Panggil processMessage dengan formatter dan pesan, lalu cetak hasilnya
// TODO: Cetak kategori pola pada baris baru
// Format: "Pattern category: Behavioral"
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online