JavaRush /مدونة جافا /Random-AR /نمط الأوامر في الكلمات الخاصة بك
Roman_kh
مستوى
Харьков

نمط الأوامر في الكلمات الخاصة بك

نشرت في المجموعة

مرحبا بالجميع أعضاء المنتدى!

لقد فهمت تمامًا (كما يبدو لي) هذا النمط Commandوأريد أن أحاول التحدث عنه "بكلماتي الخاصة". نمط الأمر بكلماتك الخاصة - 1استنادًا إلى ويكيبيديا، يمكننا معرفة أن الغرض منه هو إنشاء بنية لا تعتمد فيها الفئة المرسلة والفئة المتلقية بشكل مباشر على بعضهما البعض. تنظيم رد اتصال لفئة تتضمن فئة المرسل . من حيث المبدأ، هو مكتوب بشكل واضح وصحيح، ولكن هذا من الناحية النظرية. كيف نفعل ذلك؟ وهنا تبدأ المشاكل، لأن... لم يعد الوصف واضحًا وواضحًا. لذلك، فهمت ذلك، قررت أن أخبركم كيف فهمت ذلك، ربما يكون مفيدًا لشخص ما: بناءً على وصف الغرض من هذا النمط، سأقوم بدمج الوصف مع الكود لجعله أكثر وضوحًا، لأن وفي نفس ويكيبيديا عمموها على العديد من اللغات ولذلك تم فصل الوصف عن المثال. هناك أربعة مصطلحات في هذا النمط، لنأخذها كأمر مسلم به في الوقت الحالي: الأوامر ( command)، ومستقبل الأوامر ( receiver)، ومتصل الأوامر ( invoker)، والعميل ( 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");
     }
}
لنقم بإنشاء واجهة بأسلوب واحد 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