JavaRush /Java blogi /Random-UZ /O'z so'zlaringiz bilan buyruq namunasi
Roman_kh
Daraja
Харьков

O'z so'zlaringiz bilan buyruq namunasi

Guruhda nashr etilgan

Hammaga salom forum a'zolari!

Men (menga o'xshab) naqshni yaxshilab tushunib oldim Commandva bu haqda "o'z so'zlarim bilan" gapirishga harakat qilmoqchiman. Vikipediyaga asoslanib, uning maqsadi jo'natuvchi sinf va qabul qiluvchi sinf bir-biriga bevosita bog'liq bo'lmagan tuzilmani yaratishO'z so'zlaringiz bilan buyruq namunasi - 1 ekanligini bilib olamiz . Yuboruvchi sinfni o'z ichiga olgan sinfga qayta qo'ng'iroq qilishni tashkil qilish . Aslida, u aniq va to'g'ri yozilgan, ammo bu nazariy jihatdan. Buni qanday qilish kerak? Muammolar shu yerda boshlanadi, chunki... tavsif endi unchalik aniq va ravshan emas. Shuning uchun, men buni tushundim, sizga buni qanday tushunganimni aytib berishga qaror qildim, ehtimol bu kimgadir foydali bo'ladi: Ushbu naqshning maqsadi tavsifiga asoslanib, men uni yanada aniqroq qilish uchun tavsifni kod bilan birlashtiraman, chunki Xuddi shu Vikipediyada ular uni ko'plab tillar uchun umumlashtirgan va shuning uchun tavsif misoldan ajratilgan. Ushbu naqshda to'rtta atama mavjud, keling, ularni hozircha odatiy hol sifatida qabul qilaylik: buyruqlar ( command), buyruq qabul qiluvchisi ( receiver), buyruq chaqiruvchisi ( invoker) va mijoz ( client). Men o'sha Vikipediyadan misol keltiraman, bunga toqat qilish mumkin. Vazifa ikkita narsani qila oladigan sinfdir Light: chiroqni yoqing va uni o'chiring. Shakl bo'yicha u "buyruqni qabul qiluvchi ( receiver)" bo'ladi.
/*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");
     }
}
Keling, bajariladigan va "buyruq ( )" namunasi execute()bo'yicha chaqiriladigan bir usul bilan interfeys yarataylik.command
/*the Command interface*/

public interface Command{
    void execute();
}
Sinf ko'nikmalarining bajarilishini qamrab olish kerak Light. Buning uchun biz interfeysni amalga oshiradigan TurnOnLightCommandva konstruktorda sinf ob'ektini qabul qiladigan sinflarni yaratamiz . Va ularning har biri faqat bitta harakatni bajaradi. Biri usulni chaqiradi , ikkinchisi esa chaqiradi . TurnOffLightCommandCommandLightturnOn()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();
   }
}
Endi bu inkapsullangan ob'ekt usullarini qabul qiladigan ob'ektni yaratish vaqti keldi Light. Shakl nuqtai nazaridan u buyruq chaqiruvchisi (invoker) deb ataladi. Keling, uni chaqiramiz va yaratilgan usullarda ishlatiladigan va Switchkonstruktordagi o'zgaruvchilarni qabul qilaylik . CommandflipUp()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();
    }
}
Va, albatta, biz ularni umumiy nima bo'layotganini tushunish uchun ishlatadigan sinf yaratamiz. U asosiy usul deb ataladi, unda barcha harakatlar amalga oshiriladi:
/*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();
   }
}
Chiqish quyidagicha bo'ladi:
"The light is on"
"The light is off"

Bu qayerda qo'llaniladi?

Maqsad, bu nima va nima uchun kerakligi aniq, ya'ni: muayyan ijroni ajratish kerak bo'lgan vaziyatda bu juda qulay. Shunday qilib, ba'zi funktsiyalardan foydalanish ma'lum bir dasturga bog'liq emas va uni tizimga zarar bermasdan o'zgartirish mumkin. shunga o'xshash narsa...) O'z fikr-mulohazalaringizni yozing, keling, muhokama qilamiz, balki biror narsani sodda qilib, yaxshiroq aytib berish mumkin, kerak bo'lsa hammasini tahrir qilamiz) Birinchi marta o'qiydiganlar uchun imkon qadar tushunarli bo'lishi uchun. BuilderXo'sh, kimga maqola yoqsa, unga "+" qo'yadi :) Bu men uchun muhim) Vaqt o'tishi bilan men , Singletonva boshqalar haqida ko'proq yozmoqchiman . Boshqa maqolalarimni ham ko'ring:
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION