Mod templat


Dalam Corak Templat, kelas abstrak secara terbuka mentakrifkan cara/templat untuk melaksanakan kaedahnya. Subkelasnya boleh mengatasi pelaksanaan kaedah seperti yang diperlukan, tetapi panggilan akan dibuat mengikut cara yang ditakrifkan dalam kelas abstrak. Corak reka bentuk jenis ini ialah corak tingkah laku.

Pengenalan

Niat: Tentukan rangka algoritma dalam operasi, sambil menangguhkan beberapa langkah ke subkelas. Kaedah templat membenarkan subkelas untuk mentakrifkan semula langkah-langkah tertentu algoritma tanpa mengubah struktur algoritma.

Penyelesaian utama: Sesetengah kaedah adalah perkara biasa, tetapi kaedah ini ditulis semula dalam setiap subkelas.

Bila hendak digunakan: Terdapat beberapa kaedah umum.

Cara menyelesaikan: Abstrak algoritma am ini.

Kod utama: dilaksanakan dalam kelas abstrak dan langkah lain dilaksanakan dalam subkelas.

Contoh aplikasi: 1. Semasa membina rumah, asas, pendawaian, dan paip air semuanya sama Hanya pada peringkat akhir pembinaan sahaja terdapat perbezaan seperti menambah almari dan pagar. 2. 81 kesukaran yang ditetapkan oleh Bodhisattva dalam Perjalanan ke Barat adalah rangka kerja logik peringkat atasan. 3. Sokongan untuk Hibernate dalam Spirng merangkumi beberapa kaedah yang telah ditetapkan, seperti membuka urus niaga, mendapatkan Sesi, menutup Sesi, dll. Pengaturcara tidak perlu berulang kali menulis kod piawai, dan boleh menyimpannya dengan hanya membuang entiti.

Kelebihan: 1. Bungkus bahagian yang tetap dan kembangkan bahagian yang berubah-ubah. 2. Ekstrak kod awam untuk memudahkan penyelenggaraan. 3. Tingkah laku dikawal oleh kelas induk dan dilaksanakan oleh subkelas.

Kelemahan: Setiap pelaksanaan yang berbeza memerlukan subkelas untuk dilaksanakan, mengakibatkan peningkatan dalam bilangan kelas dan menjadikan sistem lebih besar.

Senario penggunaan: 1 Terdapat kaedah biasa untuk berbilang subkelas, dan logiknya adalah sama. 2. Kaedah penting dan kompleks boleh dianggap sebagai kaedah templat.

Nota: Untuk mengelakkan operasi berniat jahat, kata kunci akhir biasanya ditambahkan pada kaedah templat.

Pelaksanaan

Kami akan mencipta kelas abstrak Permainan yang mentakrifkan tindakan, di mana kaedah templat ditetapkan kepada muktamad supaya ia tidak akan ditindih. Kriket dan Bola Sepak ialah kelas entiti yang melanjutkan Permainan dan ia mengatasi kaedah kelas abstrak.

TemplatePatternDemo, kelas demo kami menggunakan Permainan untuk menunjukkan penggunaan corak templat.

template_pattern_uml_diagram.jpg

Langkah 1

Buat kelas abstrak dengan kaedah templatnya ditetapkan kepada muktamad.

Game.java

public abstract class Game {
   abstract void initialize();
   abstract void startPlay();
   abstract void endPlay();

   //模板
   public final void play(){

      //初始化游戏
      initialize();

      //开始游戏
      startPlay();

      //结束游戏
      endPlay();
   }
}

Langkah 2

Buat kelas entiti yang memanjangkan kelas di atas.

Cricket.java

public class Cricket extends Game {

   @Override
   void endPlay() {
      System.out.println("Cricket Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Cricket Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Cricket Game Started. Enjoy the game!");
   }
}

Football.java

public class Football extends Game {

   @Override
   void endPlay() {
      System.out.println("Football Game Finished!");
   }

   @Override
   void initialize() {
      System.out.println("Football Game Initialized! Start playing.");
   }

   @Override
   void startPlay() {
      System.out.println("Football Game Started. Enjoy the game!");
   }
}

Langkah 3

Gunakan Kaedah templat play() Permainan menunjukkan cara permainan ditakrifkan.

TemplatePatternDemo.java

public class TemplatePatternDemo {
   public static void main(String[] args) {

      Game game = new Cricket();
      game.play();
      System.out.println();
      game = new Football();
      game.play();		
   }
}

Langkah 4

Sahkan output.

Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!

Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!