JavaRush /جاوا بلاگ /Random-UR /اپنے الفاظ میں کمانڈ پیٹرن
Roman_kh
سطح
Харьков

اپنے الفاظ میں کمانڈ پیٹرن

گروپ میں شائع ہوا۔

سب کو سلام، فورم کے اراکین!

میں نے اچھی طرح سے (یہ مجھے لگتا ہے) پیٹرن کا پتہ لگا لیا ہے Commandاور میں اس کے بارے میں "اپنے الفاظ میں" بات کرنے کی کوشش کرنا چاہتا ہوں۔ آپ کے اپنے الفاظ میں کمانڈ پیٹرن - 1ویکیپیڈیا کی بنیاد پر، ہم یہ جان سکتے ہیں کہ اس کا مقصد ایک ایسا ڈھانچہ بنانا ہے جس میں بھیجنے والی کلاس اور وصول کرنے والی کلاس ایک دوسرے پر براہ راست انحصار نہ کریں۔ کسی کلاس میں کال بیک کا اہتمام کرنا جس میں بھیجنے والی کلاس شامل ہو ۔ اصولی طور پر، یہ واضح طور پر اور صحیح طریقے سے لکھا جاتا ہے، لیکن یہ نظریہ میں ہے. یہ کیسے کریں؟ یہیں سے مسائل شروع ہوتے ہیں، کیونکہ... تفصیل اب اتنی واضح اور واضح نہیں ہے۔ لہذا، میں نے اس کا اندازہ لگایا، میں نے آپ کو یہ بتانے کا فیصلہ کیا کہ میں اسے کیسے سمجھتا ہوں، ہوسکتا ہے کہ یہ کسی کے لیے مفید ہو: اس پیٹرن کے مقصد کی وضاحت کی بنیاد پر، میں اس کو مزید واضح کرنے کے لیے تفصیل کو کوڈ کے ساتھ جوڑ دوں گا، کیونکہ اسی ویکیپیڈیا میں انہوں نے اسے بہت سی زبانوں کے لیے عام کیا اور اس لیے تفصیل کو مثال سے الگ کر دیا گیا ہے۔ اس پیٹرن میں چار اصطلاحات ہیں، آئیے ان کو ابھی کے لیے مان لیں: commands( command) , command receiver( receiver) , command caller( invoker) اور client( 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");
     }
}
آئیے ایک طریقہ کے ساتھ ایک انٹرفیس بنائیں جو عمل میں آئے اور جسے "command ( )" پیٹرن execute()کے لحاظ سے کہا جاتا ہے۔command
/*the Command interface*/

public interface Command{
    void execute();
}
طبقاتی مہارتوں کے نفاذ کو سمیٹنا ضروری ہے Light۔ ایسا کرنے کے لیے، ہم کلاسز بنائیں گے TurnOnLightCommandاور TurnOffLightCommandوہ انٹرفیس کو نافذ کریں گے Commandاور جو کنسٹرکٹر میں کلاس آبجیکٹ کو قبول کرے گا Light۔ اور ان میں سے ہر ایک صرف ایک عمل کرے گا۔ ایک طریقہ کو کال کرے گا turnOn()، اور دوسرا کال کرے گا 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();
   }
}
اب وقت آگیا ہے کہ ایک ایسی آبجیکٹ بنائیں جو ان انکیپسلیٹڈ آبجیکٹ طریقوں کو قبول کرے Light۔ پیٹرن کے لحاظ سے، اسے کمانڈ کالر (دعوت کرنے والا) کہا جاتا ہے۔ آئیے اسے کال کریں Switchاور اسے کنسٹرکٹر میں متغیرات کو قبول کرنے دیں Commandجو بنائے گئے طریقوں میں استعمال ہوں گے flipUp()اور 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