Melaksanakan Pola Kaedah Templat di Jawa

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan melihat bagaimana memanfaatkan corak kaedah templat - salah satu corak GoF yang paling popular.

Ini menjadikannya lebih mudah untuk menerapkan algoritma kompleks dengan merangkum logik dalam satu kaedah.

2. Pelaksanaan

Untuk menunjukkan bagaimana kaedah kaedah templat berfungsi, mari buat contoh mudah yang mewakili membina stesen komputer.

Memandangkan definisi corak itu, struktur algoritma akan ditakrifkan dalam kelas asas yang mendefinisikan template membina () kaedah :

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(); // ... }

The ComputerBuilder kelas bertanggungjawab untuk menggariskan langkah-langkah yang diperlukan untuk membina sebuah komputer dengan mengisytiharkan kaedah untuk menambah dan menyediakan komponen yang berbeza , seperti papan induk dan pemproses.

Di sini, kaedah build () adalah kaedah templat , yang menentukan langkah-langkah algoritma untuk memasang bahagian komputer dan mengembalikan contoh Komputer yang diinisialisasi sepenuhnya .

Perhatikan bahawa saya dinyatakan sebagai muktamad untuk mengelakkannya ditimpa.

3. Dalam Tindakan

Dengan kelas asas yang telah ditetapkan, mari cuba menggunakannya dengan membuat dua subkelas. Satu yang membina komputer "standard", dan yang lain yang membina 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 kita lihat, kita tidak perlu bimbang tentang keseluruhan proses pemasangan tetapi hanya untuk menyediakan pelaksanaan untuk kaedah yang berasingan.

Sekarang, mari kita lihat dalam tindakan:

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. Kaedah Templat di Perpustakaan Teras Java

Corak ini banyak digunakan di perpustakaan inti Java, contohnya oleh java.util.AbstractList, atau java.util.Ab AbstractSet.

Sebagai contoh, Abstrak Senarai menyediakan pelaksanaan rangka antara muka Senarai .

Contoh kaedah templat boleh menjadi kaedah addAll () , walaupun tidak ditentukan secara eksplisit sebagai akhir:

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 melaksanakan kaedah tambah () :

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

Di sini, adalah tanggungjawab programmer untuk menyediakan pelaksanaan untuk menambahkan elemen ke dalam senarai pada indeks yang diberikan (bahagian varian dari algoritma penyenaraian).

5. Kesimpulan

Dalam artikel ini, kami menunjukkan pola metode templat dan cara menerapkannya di Java.

Corak kaedah templat mempromosikan penggunaan semula kod dan penyahpasangan, tetapi dengan mengorbankan penggunaan warisan.

Seperti biasa, semua contoh kod yang ditunjukkan dalam artikel ini terdapat di GitHub.