Pola Template Method
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 59 dari 70.
Pola Template Method adalah pola perilaku yang menentukan kerangka algoritma dalam base class, sehingga subclass dapat menimpa langkah-langkah tertentu tanpa mengubah struktur keseluruhan. Base class mengendalikan alur kerja, sementara class turunan menyesuaikan bagian-bagian tertentu.
Pola ini menggunakan pewarisan dan method abstrak. class dasar berisi "template method" yang memanggil serangkaian langkah, beberapa di antaranya bersifat abstrak dan harus diimplementasikan oleh subclass:
public abstract class DataProcessor
{
// Template method: menentukan struktur algoritma
public void Process()
{
ReadData();
ProcessData();
SaveData();
}
protected abstract void ReadData();
protected abstract void ProcessData();
protected virtual void SaveData() => Console.WriteLine("Saving to default location");
}
public class CsvProcessor : DataProcessor
{
protected override void ReadData() => Console.WriteLine("Reading CSV file");
protected override void ProcessData() => Console.WriteLine("Parsing CSV data");
}
public class JsonProcessor : DataProcessor
{
protected override void ReadData() => Console.WriteLine("Reading JSON file");
protected override void ProcessData() => Console.WriteLine("Parsing JSON data");
protected override void SaveData() => Console.WriteLine("Saving to cloud");
}Setiap subclass menyediakan implementasinya sendiri, sementara base class menetapkan urutan operasi:
DataProcessor csv = new CsvProcessor();
csv.Process();
// Membaca file CSV
// Mengurai data CSV
// Menyimpan ke lokasi bawaan
DataProcessor json = new JsonProcessor();
json.Process();
// Membaca file JSON
// Mengurai data JSON
// Menyimpan ke cloudPola Template Method ideal digunakan saat beberapa class berbagi struktur algoritma yang sama, tetapi berbeda dalam langkah-langkah tertentu. Pola ini mendorong penggunaan ulang kode dengan menempatkan logika umum di base class, sekaligus memberi fleksibilitas melalui method yang dapat ditimpa.
Tantangan
MudahMari kita buat sistem pembuatan laporan menggunakan pola Template Method. Berbagai jenis laporan, seperti laporan penjualan dan laporan inventaris, memiliki struktur keseluruhan yang sama: semuanya perlu mengumpulkan data, memformatnya, lalu menghasilkan output, tetapi setiap jenis laporan menangani langkah-langkah ini dengan cara berbeda.
Kamu akan mengatur kodemu dalam tiga file:
ReportGenerator.cs: Buat class abstrakReportGeneratordalam namespaceReporting. Base class ini mendefinisikan kerangka algoritma pembuatan laporan melalui template method bernamaGenerate(). Method ini harus memanggil tiga langkah secara berurutan:GatherData(),FormatReport(), danOutputReport(). JadikanGatherData()danFormatReport()abstrak, karena setiap jenis laporan akan mengimplementasikannya dengan cara berbeda, sedangkanOutputReport()harus berupa method virtual dengan implementasi default yang mencetakSending to default printer.ConcreteReports.cs: Buat dua class laporan konkret dalam namespace yang sama, yang mewarisiReportGenerator:SalesReportmengimplementasikanGatherData()untuk mencetakCollecting sales data from databasedanFormatReport()untuk mencetakFormatting as sales summaryInventoryReportmengimplementasikanGatherData()untuk mencetakScanning warehouse inventory,FormatReport()untuk mencetakFormatting as inventory list, dan menimpaOutputReport()untuk mencetakSending to warehouse manager
Program.cs: Satukan semuanya dengan membuat instance laporan dan membuat laporan tersebut. Template method memastikan setiap laporan mengikuti proses tiga langkah yang sama, tetapi perilaku spesifik setiap langkah berbeda bergantung pada jenis laporannya.
Kamu akan menerima satu input:
- Jenis laporan:
salesatauinventory
Buat generator laporan yang sesuai berdasarkan input, lalu panggil method Generate()-nya.
Misalnya, jika input-nya sales, output-nya adalah:
Collecting sales data from database
Formatting as sales summary
Sending to default printerJika input-nya inventory, output-nya adalah:
Scanning warehouse inventory
Formatting as inventory list
Sending to warehouse managerPerhatikan bahwa kedua laporan mengikuti struktur algoritma yang persis sama, yaitu mengumpulkan, memformat, lalu menghasilkan output, tetapi implementasi setiap langkah disesuaikan. SalesReport menggunakan perilaku output default, sedangkan InventoryReport menimpanya. Ini menunjukkan bagaimana pola Template Method memungkinkan kamu mengatur langkah mana yang wajib ditimpa dan langkah mana yang dapat disesuaikan secara opsional!
Coba sendiri
using System;
using Reporting;
class Program
{
public static void Main(string[] args)
{
string reportType = Console.ReadLine();
// TODO: Buat pembuat laporan yang sesuai berdasarkan reportType
// Jika reportType bernilai "sales", buat SalesReport
// Jika reportType bernilai "inventory", buat InventoryReport
// Lalu panggil method Generate() pada laporan tersebut
}
}
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 list2Property & 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