JavaRush /Java Blogu /Random-AZ /Öz sözlərinizlə əmr nümunəsi
Roman_kh
Səviyyə
Харьков

Öz sözlərinizlə əmr nümunəsi

Qrupda dərc edilmişdir

Hər kəsə salam, Forum üzvləri!

Mən hərtərəfli (mənə elə gəlir) nümunəni başa düşdüm Commandvə bu barədə "öz sözlərimlə" danışmağa çalışmaq istəyirəm. Öz sözlərinizlə əmr nümunəsi - 1Vikipediyaya əsaslanaraq öyrənə bilərik ki, onun məqsədi göndərən və qəbul edən sinifin bir-birindən birbaşa asılı olmadığı struktur yaratmaqdır. Göndərən sinfi ehtiva edən sinfə geri zəngin təşkili . Prinsipcə, aydın və düzgün yazılmışdır, lakin bu, nəzəri cəhətdəndir. Bunu necə etmək olar? Problemlər buradan başlayır, çünki... təsviri artıq o qədər də aydın və aydın deyil. Buna görə də başa düşdüm, bunu necə başa düşdüyümü sizə izah etmək qərarına gəldim, bəlkə kiməsə faydalı olacaq: Bu nümunənin məqsədinin təsvirinə əsaslanaraq, daha aydın olması üçün təsviri kodla birləşdirəcəyəm, çünki eyni Vikipediyada onu bir çox dillər üçün ümumiləşdirdilər və buna görə də təsvir nümunədən ayrıldı. Bu nümunədə dörd termin var, gəlin onları indiki kimi qəbul edək: əmrlər ( command), əmr qəbuledicisi ( receiver), əmr çağıran ( invoker) və müştəri ( client). Eyni Vikipediyadan misal çəkəcəyəm, buna kifayət qədər dözümlüdür. Tapşırıq iki şeyi edə bilən bir sinifdir Light: işığı yandırın və söndürün. receiverNümunə baxımından "əmr qəbuledicisi ( )" olacaq.
/*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");
     }
}
İcra edəcək və "komanda ( )" nümunəsi execute()baxımından çağırılan bir metodla interfeys yaradaq.command
/*the Command interface*/

public interface Command{
    void execute();
}
Sinif bacarıqlarının icrasını əhatə etmək lazımdır Light. Bunun üçün biz interfeysi həyata keçirən TurnOnLightCommandvə konstruktorda sinif obyektini qəbul edən siniflər yaradacağıq . Və onların hər biri yalnız bir hərəkət edəcək. Biri metodu çağıracaq , digəri isə çağıracaq . 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();
   }
}
İndi bu əhatə olunmuş obyekt metodlarını qəbul edən obyekt yaratmağın vaxtıdır Light. Nümunə baxımından ona əmr çağıran (invoker) deyilir. Onu çağıraq Switchvə konstruktorda Commandyaradılan metodlarda istifadə olunacaq dəyişənləri qəbul edək flipUp()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();
    }
}
Və əlbəttə ki, biz ümumi nə baş verdiyini anlamaq üçün onlardan istifadə edəcək bir sinif yaradacağıq. Bütün hərəkətlərin baş verəcəyi əsas üsul adlandırılacaq:
/*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();
   }
}
Çıxış aşağıdakı olacaq:
"The light is on"
"The light is off"

Bu harada tətbiq olunur?

Məqsəd aydındır ki, bunun nəyə və nəyə ehtiyacı var, yəni: müəyyən bir icranı ayırmaq lazım olan bir vəziyyətdə, bu çox rahatdır. Beləliklə, bəzi funksiyaların istifadəsi müəyyən bir tətbiqdən asılı deyil və sistemə zərər vermədən dəyişdirilə bilər. belə bir şey...) Şərhlərinizi yazın, müzakirə edək, bəlkə nəyisə sadələşdirib daha yaxşı izah etmək olar, lazım olsa hər şeyi redaktə edərik) İlk dəfə oxuyanlar üçün mümkün qədər aydın olsun. BuilderYaxşı, kimin məqaləsi xoşuna gəlirsə, üzərinə “+” işarəsi qoyur :) Bu mənim üçün vacibdir) Zaman keçdikcə , Singletonvə digərləri haqqında daha çox yazmaq istəyirəm . Digər məqalələrimə də baxın:
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION