JavaRush /Java блогу /Random-KY /Өз сөзүңүз менен буйрук үлгүсү
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жана конструктордо класс an objectисин кабыл алабыз . Жана алардын ар бири бир гана аракетти аткарат. Бири методду чакырат , экинчиси чакырат . 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();
   }
}
Эми бул инкапсуляцияланган an object ыкмаларын кабыл алган an objectти түзүүгө убакыт келди 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