Салом ба ҳама, аъзоёни форум!
Ман ба таври амиқ (ба назарам) намунаро фаҳмидам
Command
ва мехоҳам кӯшиш кунам, ки дар ин бора "бо суханони худам" сӯҳбат кунам.
Дар асоси Википедиа, мо метавонем фаҳмем, ки ҳадафи он
сохтани сохторест, ки дар он синфи ирсолкунанда ва синфи қабулкунанда мустақиман аз ҳамдигар вобаста нестанд. Ташкor занги бозгашт ба синфе, ки синфи ирсолкунандаро дар бар мегирад . Дар асл, он равшан ва дуруст навишта шудааст, аммо ин дар назария аст. Инро чй тавр бояд кард? Мушкилот аз ин ҷо сар мешавад, зеро... тавсиф дигар он кадар равшану равшан нест. Аз ин рӯ, ман инро фаҳмидам, ман қарор додам, ки ба шумо чӣ гуна фаҳмидам, шояд ба касе муфид бошад: Дар асоси тавсифи ҳадафи ин намуна, ман тавсифро бо рамз якҷоя мекунам, то равшантар шавад, зеро дар ҳамон Википедиа онҳо онро барои бисёр забонҳо умумӣ кардаанд ва аз ин рӯ тавсиф аз мисол ҷудо карда шудааст. Дар ин намуна чаҳор истилоҳ вуҷуд дорад, биёед онҳоро барои ҳозир муқаррарӣ қабул кунем: фармонҳо(
command
), қабулкунандаи фармон(
receiver
), даъваткунандаи фармон(
invoker
) ва муштарӣ(
client
). Ман аз ҳамон Википедиа мисол мегирам, ин хеле қобor таҳаммул аст.
Вазифа синфест
Light
, ки ду корро карда метавонад: чароғро фурӯзон ва хомӯш кунед. Дар робита ба намуна он "қабулкунандаи фармон (
receiver
)" хоҳад буд
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
)" номида мешавад.
public interface Command{
void execute();
}
Иҷрои малакаҳои синфро фаро гирифтан лозим аст
Light
. Барои ин, мо синфҳоро эҷод мекунем
TurnOnLightCommand
ва
TurnOffLightCommand
интерфейсро амалӣ мекунанд
Command
ва an objectи синфро дар конструктор қабул мекунанд
Light
. Ва ҳар кадоми онҳо танҳо як амалро иҷро мекунанд. Яке ба усул занг мезанад
turnOn()
ва дигаре занг мезанад
turnOff()
.
public class TurnOnLightCommand implements Command{
private Light theLight;
public TurnOnLightCommand(Light light){
this.theLight=light;
}
public void execute(){
theLight.turnOn();
}
}
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()
.
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();
}
}
Ва албатта, мо синферо эҷод мекунем, ки онҳоро барои фаҳмидани он чизе, ки дар маҷмӯъ рӯй дода истодааст, истифода барад. Он усули асосӣ номида мешавад, ки дар он тамоми амалҳо сурат мегиранд:
public class TestCommand{
public static void main(String[] args){
Light l=new Light();
Command switchUp=new TurnOnLightCommand(l);
Command switchDown=new TurnOffLightCommand(l);
Switch s=new Switch(switchUp,switchDown);
s.flipUp();
s.flipDown();
}
}
Натиҷа чунин хоҳад буд:
"The light is on"
"The light is off"
Ин дар куҷо татбиқ карда мешавад?
Мақсад равшан аст, ки чӣ ва чаро ин лозим аст, аз ҷумла: дар вазъияте, ки шумо бояд иҷрои мушаххасро ҷудо кунед, ин хеле қулай аст. Барои он ки истифодаи баъзе функсияҳо аз татбиқи мушаххас вобаста набошад ва онро бидуни осеб ба система тағир додан мумкин аст. чизе монанди ин...) Фикру мулоҳизаҳои худро нависед, биёед баҳс кунем, шояд чизеро соддатар кардан ва беҳтар гуфтан мумкин аст, агар лозим шавад, ҳамаашро таҳрир мекунем) То барои онҳое, ки бори аввал мехонанд, то ҳадди имкон равшан бошад.
Builder
Хуб, ҳар касе, ки мақола писанд меояд, дар он "+" мегузорад :) Ин барои ман муҳим аст) Бо мурури замон ман мехоҳам бештар дар бораи ,
Singleton
ва дигарон нависам .
Ба мақолаҳои дигари ман низ нигаред:
GO TO FULL VERSION