JavaRush /Java блогы /Random-KK /Өз сөзіңізбен пәрмен үлгісі
Roman_kh
Деңгей
Харьков

Өз сөзіңізбен пәрмен үлгісі

Топта жарияланған

Барлығына сәлем, форум мүшелері!

Мен үлгіні мұқият түсіндім (менің ойымша) Commandжәне бұл туралы «өз сөзіммен» айтқым келеді. Википедияға сүйене отырып, оның мақсаты жіберуші және қабылдаушы класс бір-біріне тікелей тәуелді болмайтын құрылымды құруӨз сөзіңізбен пәрмен үлгісі - 1 екенін білуге ​​болады . Жіберуші сыныбын қамтитын сыныпқа кері қоңырауды ұйымдастыру . Негізінде ол анық және дұрыс жазылған, бірақ бұл теорияда. Мұны қалай жасауға болады? Мәселелер осы жерден басталады, өйткені... сипаттама енді соншалықты анық және айқын емес. Сондықтан мен оны түсіндім, мен оны қалай түсінгенімді айтуды шештім, мүмкін бұл біреуге пайдалы болар: Осы үлгінің мақсатының сипаттамасына сүйене отырып, мен оны түсінікті ету үшін сипаттаманы codeпен біріктіремін, өйткені сол Википедияда олар оны көптеген тілдер үшін жалпылады, сондықтан сипаттама мысалдан бөлінген. Бұл үлгіде төрт термин бар, оларды әзірше кәдімгідей алайық: пәрмендер( command), пәрмен қабылдағыш( receiver), команда шақырушы( invoker) және клиент( client). Мен сол Википедиядан мысал аламын, бұл өте төзімді. Тапсырма екі нәрсені орындай алатын сынып 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және конструкторда сынып нысанын қабылдайтын сыныптарды жасаймыз . Және олардың әрқайсысы бір ғана әрекетті орындайды. Біреуі әдісті шақырады , ал екіншісі шақырады . 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();
   }
}
Енді осы инкапсуляцияланған нысан әдістерін қабылдайтын нысанды жасау уақыты келді Light. Үлгі бойынша ол команданы шақырушы (шақырушы) деп аталады. Оны шақырайық және ол құрылатын әдістерде қолданылатын Switchконструктордағы айнымалыларды қабылдасын және . 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();
    }
}
Әрине, біз оларды жалпы не болып жатқанын түсіну үшін қолданатын сынып жасаймыз. Ол негізгі әдіс деп аталады, онда барлық әрекет орындалады:
/*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