سڀني کي سلام، فورم جا ميمبر!
مون چڱيءَ طرح (مون کي لڳي ٿو) نمونو معلوم ڪيو آهي
Command
۽ مان ان بابت ڳالهائڻ جي ڪوشش ڪرڻ چاهيان ٿو ”پنهنجي پنهنجي لفظن ۾“.
وڪيپيڊيا جي بنياد تي، اسان اهو ڳولي سگهون ٿا ته ان جو مقصد
هڪ اهڙي جوڙجڪ ٺاهڻ آهي جنهن ۾ موڪلڻ وارو طبقو ۽ وصول ڪندڙ طبقو سڌو سنئون هڪ ٻئي تي منحصر نه آهي. ھڪڙي ڪلاس ڏانھن ڪال بڪ کي منظم ڪرڻ جنھن ۾ موڪليندڙ طبقو شامل آھي . اصول ۾، اهو صاف ۽ صحيح لکيو ويو آهي، پر اهو نظريي ۾ آهي. اهو ڪيئن ڪجي؟ اهو آهي جتي مسئلا شروع ٿين ٿا، ڇاڪاڻ ته ... وضاحت هاڻي ايترو واضح ۽ واضح ناهي. تنهن ڪري، مون ان کي سمجهي ورتو، مون فيصلو ڪيو ته توهان کي ٻڌايان ته مون ان کي ڪيئن سمجهيو، ٿي سگهي ٿو اهو ڪنهن لاء ڪارائتو هجي: هن نموني جي مقصد جي وضاحت جي بنياد تي، مان ان کي وڌيڪ واضح ڪرڻ لاء ڪوڊ سان تفصيل کي گڏ ڪندس، ڇاڪاڻ ته ساڳئي وڪيپيڊيا ۾ انهن ڪيترن ئي ٻولين لاءِ ان کي عام ڪيو آهي ۽ ان ڪري وضاحت کي مثال کان الڳ ڪيو ويو آهي. ھن نموني ۾ چار اصطلاح آھن، اچو ته انھن کي ھاڻي سمجھون: ڪمانڊ(
command
)، ڪمانڊ رسيور(
receiver
)، ڪمانڊ ڪالر(
invoker
)، ۽ ڪلائنٽ(
client
). مان ان ئي وڪيپيڊيا مان هڪ مثال وٺندس، اهو ڪافي قابل برداشت آهي.
ڪم ھڪڙو طبقو آھي
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
۽ جيڪو Constructor ۾ هڪ طبقي اعتراض کي قبول ڪندو
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();
}
}
ھاڻي اھو وقت آھي ھڪڙو اعتراض ٺاھڻ جو جيڪو قبول ڪري سگھي ٿو انھن encapsulated اعتراض طريقن کي
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