JavaRush /Blog Java /Random-MS /Corak arahan dalam perkataan anda sendiri
Roman_kh
Tahap
Харьков

Corak arahan dalam perkataan anda sendiri

Diterbitkan dalam kumpulan

Hello semua, ahli Forum!

Saya telah dengan teliti (sepertinya saya) mengetahui coraknya Commanddan saya ingin cuba bercakap mengenainya "dengan kata-kata saya sendiri." Corak arahan dalam perkataan anda sendiri - 1Berdasarkan Wikipedia, kita dapat mengetahui bahawa tujuannya adalah untuk mencipta struktur di mana kelas penghantaran dan kelas penerima tidak bergantung secara langsung antara satu sama lain. Mengatur panggilan balik ke kelas yang termasuk kelas penghantar . Pada dasarnya, ia ditulis dengan jelas dan betul, tetapi ini adalah secara teori. Bagaimana untuk melakukan ini? Di sinilah masalah bermula, kerana... penerangannya tidak lagi begitu jelas dan jelas. Oleh itu, saya memikirkannya, saya memutuskan untuk memberitahu anda bagaimana saya memahaminya, mungkin ia berguna kepada seseorang: Berdasarkan penerangan tujuan corak ini, saya akan menggabungkan penerangan dengan kod untuk menjadikannya lebih jelas, kerana dalam Wikipedia yang sama mereka menyamaratakannya untuk banyak bahasa dan oleh itu penerangan dipisahkan daripada contoh. Terdapat empat istilah dalam corak ini, mari kita ambil mudah buat masa ini: commands( command), command receiver( receiver), command caller( invoker) dan client( client). Saya akan mengambil contoh dari Wikipedia yang sama, ia agak boleh diterima. Tugasan ialah kelas Lightyang boleh melakukan dua perkara: hidupkan lampu dan matikannya. Dari segi corak ia akan menjadi "penerima arahan ( 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 buat antara muka dengan satu kaedah execute()yang akan dilaksanakan dan yang dipanggil dari segi corak "perintah ( command)"
/*the Command interface*/

public interface Command{
    void execute();
}
Ia adalah perlu untuk merangkum pelaksanaan kemahiran kelas Light. Untuk melakukan ini, kami akan mencipta kelas TurnOnLightCommanddan TurnOffLightCommandyang melaksanakan antara muka Commanddan yang akan menerima objek kelas dalam constructor Light. Dan setiap daripada mereka akan melakukan hanya satu tindakan. Satu akan memanggil kaedah turnOn(), dan satu lagi 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();
   }
}
Kini tiba masanya untuk mencipta objek yang menerima kaedah objek terkapsul ini Light. Dari segi corak, ia dipanggil pemanggil arahan (invoker). Mari kita panggil Switchdan biarkan ia menerima pembolehubah dalam pembina Commandyang akan digunakan dalam kaedah 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 sudah tentu, kami akan mencipta kelas yang akan menggunakannya untuk memahami perkara yang berlaku secara umum. Ia akan dipanggil kaedah utama, di mana semua tindakan akan berlaku:
/*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 seperti berikut:
"The light is on"
"The light is off"

Di mana ini digunakan?

Tujuannya adalah jelas apa dan mengapa ini diperlukan, iaitu: dalam situasi di mana anda perlu memisahkan pelaksanaan tertentu, ini sangat mudah. Supaya penggunaan beberapa fungsi tidak bergantung kepada pelaksanaan tertentu dan ia boleh diubah tanpa merosakkan sistem. macam ni...) Tulis komen anda, mari kita bincang, mungkin ada yang boleh dipermudahkan dan diceritakan dengan lebih baik, semuanya akan kami edit jika perlu) Supaya bagi yang pertama kali membaca, sejelas mungkin. Nah, sesiapa yang suka artikel itu meletakkan "+" padanya :) Ini penting untuk saya) Lama kelamaan, saya mahu menulis lebih lanjut tentang Builder, Singletondan lain-lain. Lihat juga artikel saya yang lain:
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION