Pengantar Pola Desain
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 51 dari 70.
Pola desain adalah solusi teruji untuk masalah umum yang berulang kali dihadapi pengembang saat membuat perangkat lunak. Daripada menemukan kembali solusi setiap kali, pola memberi kita kosakata bersama dan pendekatan teruji untuk menyusun kode.
Anggap design pattern sebagai cetak biru. Design pattern tidak memberikan kode persis untuk kamu salin, tetapi menjelaskan cara mengatur class dan object untuk menyelesaikan tantangan tertentu. Saat seseorang berkata, "gunakan pattern Factory di sini," developer berpengalaman langsung memahami struktur umum yang diusulkan.
Pola desain terbagi menjadi tiga kategori utama:
| Kategori | Tujuan | Contoh |
|---|---|---|
| Pembuatan | Bagaimana object dibuat | Singleton, Factory |
| Struktural | Bagaimana object disusun | Adapter, Decorator |
| Perilaku | Bagaimana object berkomunikasi | Observer, Strategy |
Pola-pola yang akan kita bahas dibangun langsung berdasarkan konsep OOP yang sudah kamu pelajari, yaitu interface, inheritance, polymorphism, dan composition. Setiap pola memanfaatkan dasar-dasar ini dengan cara tertentu untuk mencapai fleksibilitas, kemudahan pemeliharaan, atau penggunaan ulang.
Dalam pelajaran berikutnya, kamu akan menerapkan beberapa pola penting, dimulai dengan Singleton, Factory, Observer, dan Strategy. Memahami pola-pola ini akan membantumu mengenali solusi umum dalam codebase yang sudah ada dan membuat keputusan arsitektur yang lebih baik dalam proyekmu sendiri.
Tantangan
MudahMari kita buat sistem katalog pattern sederhana yang mengatur informasi design pattern di beberapa file. Ini akan membantumu memahami cara pattern dikategorikan sambil berlatih mengatur kode dengan baik.
Kamu akan membuat tiga file untuk memisahkan tanggung jawab yang berbeda:
Pattern.cs: Definisikan classPatterndi namespacePatternsyang merepresentasikan satu design pattern. Setiap pattern harus memilikiName,Category(Creational, Structural, atau Behavioral), danDescription. Sertakan methodGetSummary()yang mengembalikan string dengan format:[{Category}] {Name}: {Description}PatternCatalog.cs: Buat classPatternCatalogdi namespacePatternsyang mengelola kumpulan pattern. Katalogmu harus bisa menambahkan pattern dan memiliki methodGetPatternsByCategory(string category)yang mengembalikan list semua pattern yang cocok dengan kategori tersebut. Sertakan juga methodGetAllSummaries()yang mengembalikan list string ringkasan untuk semua pattern dalam katalog.Program.cs: Gabungkan semuanya dengan membuat katalog dan mengisinya dengan pattern berdasarkan input. Lalu tampilkan pattern yang difilter berdasarkan kategori.
Kamu akan menerima input berikut:
- Jumlah pattern yang akan ditambahkan
- Untuk setiap pattern: tiga baris yang berisi nama, kategori, dan deskripsi
- Kategori untuk memfilter
Setelah menambahkan semua pattern ke katalogmu, cetak ringkasan pattern yang cocok dengan kategori filter, satu per baris. Jika tidak ada pattern yang cocok, cetak No patterns found.
Contohnya, jika inputnya adalah:
3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
CreationalOutputnya adalah:
[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact classTantangan ini menunjukkan bagaimana mengatur class terkait ke dalam file terpisah dapat menjaga basis kodemu tetap rapi dan mudah dipelihara, prinsip yang menjadi semakin penting saat kamu menerapkan design pattern sungguhan dalam pelajaran mendatang!
Coba sendiri
using System;
using System.Collections.Generic;
using Patterns;
class Program
{
public static void Main(string[] args)
{
// Baca jumlah pola
int n = Convert.ToInt32(Console.ReadLine());
// Buat PatternCatalog baru
PatternCatalog catalog = new PatternCatalog();
// TODO: Baca detail setiap pola (nama, kategori, deskripsi)
// dan tambahkan ke katalog
for (int i = 0; i < n; i++)
{
string name = Console.ReadLine();
string category = Console.ReadLine();
string description = Console.ReadLine();
// TODO: Buat Pattern dan tambahkan ke katalog
}
// Baca kategori yang akan digunakan untuk memfilter
string filterCategory = Console.ReadLine();
// TODO: Ambil pola berdasarkan kategori filter
// dan cetak ringkasannya
// Jika tidak ada pola yang cocok, cetak "No patterns found"
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalNamespace & DirektifPengantar class & objectKata Kunci 'this'Method dan ParameterField vs PropertyKonstruktorInisialisasi objectRingkasan: Kalkulator Sederhana4Pewarisan
Sintaks Dasar Pewarisan (:)Kata Kunci 'base'Kata Kunci Virtual & OverrideClass SealedBase Class 'object'Rangkuman: Hierarki Karyawan7Fitur Lanjutan
Overloading OperatorIndexer (this[])Penimpaan ToString()Extension methodRingkasan: Custom list10Pola Desain Bagian 1
Pengantar Pola DesainSingleton yang Aman untuk ThreadPola FactoryPola Observer (Peristiwa)Pola Strategy2Property & Anggota Statis
Property yang Diimplementasikan OtomatisProperty Hanya Baca dan Hanya TulisField dan method StatisClass StatisAnggota Berbentuk Ekspresi5Polimorfisme & Antarmuka
Polimorfisme saat kompilasi vs runtimeAntarmuka vs kelas abstrakBeberapa antarmukaAntarmuka eksplisitUpcasting & DowncastingRingkasan, Kalkulator Bentuk8Konsep OOP Lanjutan
Komposisi daripada PewarisanGenerics (class dan method)Delegate dan EventAtribut dan ReflectionIDisposable dan Pernyataan usingDasar-Dasar Dependency Injection11Pola Desain Bagian 2
Pola PerintahPola AdapterPola DecoratorPola Template MethodPola StatePola CompositeLatihan sendiri: Compiler C# online