Menerapkan Pola Metode Template di Java

1. Ikhtisar

Dalam tutorial singkat ini, kita akan melihat bagaimana memanfaatkan pola metode template - salah satu pola GoF yang paling populer.

Itu membuatnya lebih mudah untuk mengimplementasikan algoritma yang kompleks dengan merangkum logika dalam satu metode.

2. Implementasi

Untuk mendemonstrasikan cara kerja pola metode template, mari buat contoh sederhana yang merepresentasikan pembangunan stasiun komputer.

Mengingat definisi pola ini, struktur algoritma akan didefinisikan di kelas dasar yang mendefinisikan template membangun () metode :

public abstract class ComputerBuilder { // ... public final Computer buildComputer() { addMotherboard(); setupMotherboard(); addProcessor(); return new Computer(computerParts); } public abstract void addMotherboard(); public abstract void setupMotherboard(); public abstract void addProcessor(); // ... }

Kelas ComputerBuilder bertanggung jawab untuk menguraikan langkah-langkah yang diperlukan untuk membangun komputer dengan menyatakan metode untuk menambah dan mengatur komponen yang berbeda , seperti motherboard dan prosesor.

Di sini, metode build () adalah metode template , yang mendefinisikan langkah-langkah algoritme untuk merakit bagian-bagian komputer dan mengembalikan instance Komputer yang diinisialisasi sepenuhnya .

Perhatikan bahwa i t dideklarasikan sebagai final untuk mencegahnya diganti.

3. Beraksi

Dengan kelas dasar yang sudah ditetapkan, mari kita coba menggunakannya dengan membuat dua subkelas. Satu yang membangun komputer "standar", dan yang lainnya membuat komputer "kelas atas":

public class StandardComputerBuilder extends ComputerBuilder { @Override public void addMotherboard() { computerParts.put("Motherboard", "Standard Motherboard"); } @Override public void setupMotherboard() { motherboardSetupStatus.add( "Screwing the standard motherboard to the case."); motherboardSetupStatus.add( "Pluging in the power supply connectors."); motherboardSetupStatus.forEach( step -> System.out.println(step)); } @Override public void addProcessor() { computerParts.put("Processor", "Standard Processor"); } }

Dan inilah varian HighEndComputerBuilder :

public class HighEndComputerBuilder extends ComputerBuilder { @Override public void addMotherboard() { computerParts.put("Motherboard", "High-end Motherboard"); } @Override public void setupMotherboard() { motherboardSetupStatus.add( "Screwing the high-end motherboard to the case."); motherboardSetupStatus.add( "Pluging in the power supply connectors."); motherboardSetupStatus.forEach( step -> System.out.println(step)); } @Override public void addProcessor() { computerParts.put("Processor", "High-end Processor"); } }

Seperti yang bisa kita lihat, kita tidak perlu khawatir tentang keseluruhan proses perakitan, tetapi hanya menyediakan implementasi untuk metode terpisah.

Sekarang, mari kita lihat aksinya:

new StandardComputerBuilder() .buildComputer(); .getComputerParts() .forEach((k, v) -> System.out.println("Part : " + k + " Value : " + v)); new HighEndComputerBuilder() .buildComputer(); .getComputerParts() .forEach((k, v) -> System.out.println("Part : " + k + " Value : " + v));

4. Metode Template di Perpustakaan Inti Java

Pola ini banyak digunakan di pustaka inti Java, misalnya oleh java.util.AbstractList, atau java.util.AbstractSet.

Misalnya, Daftar Abstrak menyediakan implementasi kerangka antarmuka Daftar .

Contoh metode template bisa menjadi metode addAll () , meskipun tidak secara eksplisit didefinisikan sebagai final:

public boolean addAll(int index, Collection c) { rangeCheckForAdd(index); boolean modified = false; for (E e : c) { add(index++, e); modified = true; } return modified; }

Pengguna hanya perlu mengimplementasikan metode add () :

public void add(int index, E element) { throw new UnsupportedOperationException(); }

Di sini, pemrogram bertanggung jawab untuk menyediakan implementasi untuk menambahkan elemen ke daftar pada indeks yang diberikan (bagian varian dari algoritme pencatatan).

5. Kesimpulan

Di artikel ini, kami menunjukkan pola metode template dan cara menerapkannya di Java.

Pola metode template mempromosikan penggunaan ulang dan pemisahan kode, tetapi dengan mengorbankan penggunaan pewarisan.

Seperti biasa, semua contoh kode yang ditampilkan dalam artikel ini tersedia di GitHub.