JavaRush /Блоги Java /Random-TG /Намунаи фармон бо суханони худ
Roman_kh
Сатҳи
Харьков

Намунаи фармон бо суханони худ

Дар гурӯҳ нашр шудааст

Салом ба ҳама, аъзоёни форум!

Ман ба таври амиқ (ба назарам) намунаро фаҳмидам Commandва мехоҳам кӯшиш кунам, ки дар ин бора "бо суханони худам" сӯҳбат кунам. Намунаи фармон бо суханони худ - 1Дар асоси Википедиа, мо метавонем фаҳмем, ки ҳадафи он сохтани сохторест, ки дар он синфи ирсолкунанда ва синфи қабулкунанда мустақиман аз ҳамдигар вобаста нестанд. Ташкor занги бозгашт ба синфе, ки синфи ирсолкунандаро дар бар мегирад . Дар асл, он равшан ва дуруст навишта шудааст, аммо ин дар назария аст. Инро чй тавр бояд кард? Мушкилот аз ин ҷо сар мешавад, зеро... тавсиф дигар он кадар равшану равшан нест. Аз ин рӯ, ман инро фаҳмидам, ман қарор додам, ки ба шумо чӣ гуна фаҳмидам, шояд ба касе муфид бошад: Дар асоси тавсифи ҳадафи ин намуна, ман тавсифро бо рамз якҷоя мекунам, то равшантар шавад, зеро дар ҳамон Википедиа онҳо онро барои бисёр забонҳо умумӣ кардаанд ва аз ин рӯ тавсиф аз мисол ҷудо карда шудааст. Дар ин намуна чаҳор истилоҳ вуҷуд дорад, биёед онҳоро барои ҳозир муқаррарӣ қабул кунем: фармонҳо( command), қабулкунандаи фармон( receiver), даъваткунандаи фармон( invoker) ва муштарӣ( client). Ман аз ҳамон Википедиа мисол мегирам, ин хеле қобor таҳаммул аст. Вазифа синфест Light, ки ду корро карда метавонад: чароғро фурӯзон ва хомӯш кунед. Дар робита ба намуна он "қабулкунандаи фармон ( 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");
     }
}
Биёед интерфейсеро бо як усул созем execute(), ки иҷрошаванда ва аз рӯи намунаи "фармон ( command)" номида мешавад.
/*the Command interface*/

public interface Command{
    void execute();
}
Иҷрои малакаҳои синфро фаро гирифтан лозим аст Light. Барои ин, мо синфҳоро эҷод мекунем TurnOnLightCommandва TurnOffLightCommandинтерфейсро амалӣ мекунанд Commandва an objectи синфро дар конструктор қабул мекунанд Light. Ва ҳар кадоми онҳо танҳо як амалро иҷро мекунанд. Яке ба усул занг мезанад turnOn()ва дигаре занг мезанад 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();
   }
}
Ҳоло вақти сохтани an objectе расидааст, ки ин усулҳои an objectи инкапсулшударо қабул мекунад Light. Аз нуқтаи назари намуна, онро даъваткунандаи фармон (инвокер) меноманд. Биёед онро даъват кунем Switchва бигзор он тағирёбандаҳоро дар конструктор қабул кунад Command, ки дар усулҳои сохташуда истифода мешаванд 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();
    }
}
Ва албатта, мо синферо эҷод мекунем, ки онҳоро барои фаҳмидани он чизе, ки дар маҷмӯъ рӯй дода истодааст, истифода барад. Он усули асосӣ номида мешавад, ки дар он тамоми амалҳо сурат мегиранд:
/*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();
   }
}
Натиҷа чунин хоҳад буд:
"The light is on"
"The light is off"

Ин дар куҷо татбиқ карда мешавад?

Мақсад равшан аст, ки чӣ ва чаро ин лозим аст, аз ҷумла: дар вазъияте, ки шумо бояд иҷрои мушаххасро ҷудо кунед, ин хеле қулай аст. Барои он ки истифодаи баъзе функсияҳо аз татбиқи мушаххас вобаста набошад ва онро бидуни осеб ба система тағир додан мумкин аст. чизе монанди ин...) Фикру мулоҳизаҳои худро нависед, биёед баҳс кунем, шояд чизеро соддатар кардан ва беҳтар гуфтан мумкин аст, агар лозим шавад, ҳамаашро таҳрир мекунем) То барои онҳое, ки бори аввал мехонанд, то ҳадди имкон равшан бошад. BuilderХуб, ҳар касе, ки мақола писанд меояд, дар он "+" мегузорад :) Ин барои ман муҳим аст) Бо мурури замон ман мехоҳам бештар дар бораи , Singletonва дигарон нависам . Ба мақолаҳои дигари ман низ нигаред:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION