Hemmelere salam, Forumyň agzalary!
Men bu nagşy düýpli düşündim
Command
we bu hakda "öz sözlerim bilen" gürleşmek isleýärin.
Wikipediýa esaslanyp, maksadynyň iberýän synp bilen kabul ediji synpyň biri-birine gönüden-göni bagly bolmadyk gurluşyny döretmekdigini bilip bileris .
Iberiji synpy öz içine alýan synpa jaň etmek . Aslynda, takyk we dogry ýazylýar, ýöne bu teoriýada. Muny nädip etmeli? Meseleler şu ýerden başlaýar, sebäbi ... beýany indi beýle düşnükli we düşnükli däl. Şonuň üçinem düşündim, nädip düşünendigimi aýtmagy makul bildim, belki kimdir biri üçin peýdaly bolar: Bu nagşyň maksadynyň beýanyna esaslanyp, düşündirişi kod bilen has düşnükli ederin, sebäbi şol bir Wikipediýada ony köp dilde umumylaşdyrdylar we şonuň üçin düşündiriş mysaldan aýryldy. Bu nagyşda dört adalga bar, geliň häzirlikçe kabul edeliň: buýruklar (
command
), buýruk kabul ediji (
receiver
), buýruk çagyrýan (
invoker
) we müşderi (
client
). Şol bir Wikipediadan mysal alaryn, gaty çydamly.
Wezipe iki zady edip bilýän synpdyr
Light
: çyrany ýakyň we öçüriň. Nagyş nukdaýnazaryndan “buýruk kabul ediji (
receiver
)” bolar
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");
}
}
Geliň, ýerine ýetirjek we "buýruk ( )" nagşy
execute()
boýunça çagyrylýan bir usul bilen interfeýs döredeliň
command
public interface Command{
void execute();
}
Synp endikleriniň ýerine ýetirilmegini jemlemek zerurdyr
Light
. Munuň üçin konstruktordaky synp obýektini kabul etjek we
TurnOnLightCommand
interfeýsi
TurnOffLightCommand
durmuşa geçirýän synplary dörederis . Olaryň hersi diňe bir hereket eder. Biri usuly çagyrar , beýlekisi jaň eder .
Command
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();
}
}
Indi bu gaplanan obýekt usullaryny kabul edýän obýekt döretmegiň wagty geldi
Light
. Nagyş nukdaýnazaryndan buýruk çagyrýan (çagyryjy) diýilýär. Geliň, oňa jaň edeliň we döredilen usullarda ulanyljak
Switch
konstruktordaky üýtgeýjileri kabul edeliň we .
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();
}
}
Elbetde, umuman nämeleriň bolup geçýändigine düşünmek üçin olary ulanjak synp dörederis. Thehli hereketleriň boljak esasy usuly diýlip atlandyrylar:
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();
}
}
Çykyş aşakdakylar bolar:
"The light is on"
"The light is off"
Bu nirede ulanylýar?
Maksat munuň nämä we näme üçin zerurdygy düşnüklidir, ýagny: belli bir ýerine ýetirişi aýyrmaly ýagdaýyňyzda bu gaty amatly. Käbir funksiýalaryň ulanylmagy belli bir durmuşa geçirilmegine bagly bolmazlygy we ulgama zyýan ýetirmezden üýtgedilmegi mümkin. şuňa meňzeş bir zat ...) Teswirleriňizi ýazyň, ara alyp maslahatlaşalyň, belki bir zady has ýönekeýleşdirip, has gowy aýdyp bolar, zerur bolsa hemme zady redaktirläris) Şeýlelik bilen ilkinji gezek okaýanlar üçin mümkin boldugyça düşnükli bolar.
Builder
Garaz, makalany kim halasa, oňa “+” goýýar :) Bu meniň üçin möhümdir) Wagtyň geçmegi bilen we beýlekiler hakda has köp ýazasym gelýär
Singleton
.
Beýleki makalalarymy hem görüň:
GO TO FULL VERSION