Halo kabeh, anggota Forum!
Aku wis rampung (kayane aku) nemtokake pola kasebut
Command
lan aku pengin nyoba ngomong babagan "ing tembungku dhewe."
Adhedhasar Wikipedia, kita bisa ngerteni manawa tujuane yaiku
nggawe struktur sing kelas sing ngirim lan kelas sing nampa ora langsung gumantung. Ngatur panggilan bali menyang kelas sing kalebu kelas pangirim . Ing asas, iki ditulis kanthi cetha lan bener, nanging iki ing teori. Carane nindakake iki? Iki ngendi masalah diwiwiti, amarga ... gambaran wis ora dadi cetha lan ketok. Mulane, aku ngerti, aku mutusake kanggo ngandhani carane aku ngerti, bisa uga migunani kanggo wong: Adhedhasar katrangan tujuan pola iki, aku bakal nggabungake deskripsi karo kode supaya luwih jelas. amarga ing Wikipedia sing padha, umume kanggo akeh basa lan mulane katrangan kasebut dipisahake saka conto. Ana papat istilah ing pola iki, ayo padha njupuk kanggo saiki: printah (
command
), printah panrima (
receiver
), printah panelpon (
invoker
) lan klien (
client
). Aku bakal njupuk conto saka Wikipedia padha, iku cukup tolerable.
Tugas kasebut minangka kelas
Light
sing bisa nindakake rong perkara: nguripake lampu lan mateni. Ing babagan pola kasebut bakal dadi "panrima printah (
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");
}
}
Ayo nggawe antarmuka kanthi siji cara
execute()
sing bakal dieksekusi lan diarani pola "command (
command
)" .
public interface Command{
void execute();
}
Sampeyan perlu kanggo encapsulate eksekusi katrampilan kelas
Light
. Kanggo nindakake iki, kita bakal nggawe kelas
TurnOnLightCommand
lan
TurnOffLightCommand
sing ngleksanakake antarmuka
Command
lan sing bakal nampa obyek kelas ing konstruktor
Light
. Lan saben wong bakal nindakake mung siji tumindak. Siji bakal nelpon cara
turnOn()
, lan liyane bakal nelpon
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();
}
}
Saiki wektune kanggo nggawe obyek sing nampa metode obyek encapsulated iki
Light
. Ing babagan pola kasebut diarani panyeluk perintah (invoker). Ayo nelpon
Switch
lan supaya nampa variabel ing konstruktor
Command
sing bakal digunakake ing cara digawe
flipUp()
lan
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();
}
}
Lan mesthi, kita bakal nggawe kelas sing bakal digunakake kanggo ngerti apa sing kedadeyan ing umum. Iki bakal diarani cara utama, ing ngendi kabeh tumindak bakal ditindakake:
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();
}
}
Output bakal kaya ing ngisor iki:
"The light is on"
"The light is off"
Ngendi iki ditrapake?
Tujuane jelas apa lan ngapa iki dibutuhake, yaiku: ing kahanan sing kudu dipisahake eksekusi tartamtu, iki trep banget. Supaya panggunaan sawetara fungsi ora gumantung ing implementasine tartamtu lan bisa diganti tanpa ngrusak sistem. kaya kiye...) Tulis komentarmu, ayo rembugan, mbok menawa ana sing bisa digampangake lan dicritakake luwih apik, kabeh bakal diowahi yen perlu) Supaya kanggo sing maca pisanan, bisa dadi cetha. Ya, sapa sing seneng artikel kasebut menehi tandha "+" :) Iki penting kanggo aku) Sajrone wektu, aku pengin nulis liyane babagan
Builder
,
Singleton
lan liya-liyane.
Deleng uga artikelku liyane:
GO TO FULL VERSION