JavaRush /Java Blog /Random-ID /Pola perintah dengan kata-kata Anda sendiri
Roman_kh
Level 33
Харьков

Pola perintah dengan kata-kata Anda sendiri

Dipublikasikan di grup Random-ID

Halo semuanya, anggota Forum!

Saya (menurut saya) telah memahami polanya secara menyeluruh Commanddan saya ingin mencoba membicarakannya “dengan kata-kata saya sendiri”. Pola perintah dengan kata-kata Anda sendiri - 1Berdasarkan Wikipedia, kita dapat mengetahui bahwa tujuannya adalah untuk membuat struktur di mana kelas pengirim dan kelas penerima tidak bergantung secara langsung satu sama lain. Mengorganisir panggilan balik ke kelas yang mencakup kelas pengirim . Pada prinsipnya tertulis dengan jelas dan benar, tetapi ini secara teori. Bagaimana cara melakukannya? Di sinilah permasalahan dimulai, karena... deskripsinya tidak lagi jelas dan nyata. Oleh karena itu, saya mencari tahu, saya memutuskan untuk memberi tahu Anda bagaimana saya memahaminya, mungkin bermanfaat bagi seseorang: Berdasarkan uraian tujuan pola ini, saya akan menggabungkan uraian tersebut dengan kode agar lebih jelas, Karena di Wikipedia yang sama mereka menggeneralisasikannya untuk banyak bahasa dan oleh karena itu uraiannya dipisahkan dari contoh. Ada empat istilah dalam pola ini, anggap saja saat ini: perintah ( command), penerima perintah ( receiver), pemanggil perintah ( invoker) dan klien ( client). Saya akan mengambil contoh dari Wikipedia yang sama, cukup lumayan. Tugasnya adalah kelas Lightyang dapat melakukan dua hal: menyalakan dan mematikan lampu. Dalam hal polanya, itu akan menjadi "penerima perintah ( receiver)"
/*Receiver class*/

public class Light{
     public Light(){  }

     public void turnOn(){
        System.out.println("The light is on");
     }

     public void turnOff(){
        System.out.println("The light is off");
     }
}
Mari kita buat antarmuka dengan satu metode execute()yang akan dijalankan dan dipanggil dalam pola "perintah ( command)"
/*the Command interface*/

public interface Command{
    void execute();
}
Hal ini diperlukan untuk merangkum pelaksanaan keterampilan kelas Light. Untuk melakukan ini, kita akan membuat kelas TurnOnLightCommanddan TurnOffLightCommandmengimplementasikan antarmuka Commanddan yang akan menerima objek kelas di konstruktor Light. Dan masing-masing dari mereka hanya akan melakukan satu tindakan. Yang satu akan memanggil metodenya turnOn(), dan yang lainnya akan memanggil turnOff().
/*the Command for turning on the light*/

public class TurnOnLightCommand implements Command{
   private Light theLight;

   public TurnOnLightCommand(Light light){
        this.theLight=light;
       }

   public void execute(){
      theLight.turnOn();
   }
}

/*the Command for turning off the light*/

public class TurnOffLightCommand implements Command{
   private Light theLight;

   public TurnOffLightCommand(Light light){
        this.theLight=light;
       }

   public void execute(){
      theLight.turnOff();
   }
}
Sekarang saatnya membuat objek yang menerima metode objek yang dienkapsulasi ini Light. Dari segi polanya disebut pemanggil perintah (invoker). Sebut saja Switchdan biarkan ia menerima variabel dalam konstruktor Commandyang akan digunakan dalam metode yang dibuat flipUp()dan flipDown().
/*the Invoker class*/

public class Switch {
    private Command flipUpCommand;
    private Command flipDownCommand;

    public Switch(Command flipUpCommand,Command flipDownCommand){
         this.flipUpCommand=flipUpCommand;
         this.flipDownCommand=flipDownCommand;
    }

    public void flipUp(){
         flipUpCommand.execute();
    }

    public void flipDown(){
         flipDownCommand.execute();
    }
}
Dan tentu saja, kita akan membuat kelas yang akan menggunakannya untuk memahami apa yang terjadi secara umum. Ini akan disebut metode utama di mana seluruh tindakan akan berlangsung:
/*The test class*/
public class TestCommand{
   public static void main(String[] args){
       // создаем an object, который будет использоваться
       Light l=new Light();
       // создаем an objectы для всех умений an object Light:
       Command switchUp=new TurnOnLightCommand(l);
       Command switchDown=new TurnOffLightCommand(l);

       // Создаемтся invoker, с которым мы будем непосредственно контактировать:
       Switch s=new Switch(switchUp,switchDown);

       // вот проверка этого, используем методы:
       s.flipUp();
       s.flipDown();
   }
}
Outputnya adalah sebagai berikut:
"The light is on"
"The light is off"

Di mana ini diterapkan?

Tujuannya jelas apa dan mengapa hal ini diperlukan, yaitu: dalam situasi di mana Anda perlu memisahkan eksekusi tertentu, ini sangat memudahkan. Sehingga penggunaan beberapa fungsi tidak bergantung pada implementasi tertentu dan dapat diubah tanpa merusak sistem. kira-kira seperti ini...) Tulis komentar anda, mari kita berdiskusi, mungkin ada yang bisa dibuat lebih sederhana dan diceritakan lebih baik, semuanya akan kita edit jika perlu) Agar bagi yang baru pertama kali membaca, menjadi sejelas mungkin. Nah, siapa pun yang menyukai artikel itu, beri tanda “+” di atasnya :) Ini penting bagi saya) Seiring berjalannya waktu, saya ingin menulis lebih banyak tentang Builder, Singletondan lain-lain. Lihat juga artikel saya yang lain:
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION