0Pricing
Java Academy · درس

نمط Template Method: تعريف هياكل الخوارزميات

عرّف هيكل الخوارزمية في فئة أساسية، ودَع الفئات الفرعية تستكمل الخطوات

نمط Template Method: تعريف هياكل الخوارزميات درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

الغرض من Template Method

تحدد Template Method الهيكل العام لخوارزمية في فئة أساسية، وتؤجل بعض الخطوات إلى الفئات الفرعية. ويمكن للفئات الفرعية تجاوز الخطوات دون تغيير البنية العامة.

الفئة الأساسية المجرّدة

تحتوي الفئة الأساسية على طريقة القالب، وتكون عادةً final، لتنسيق الخطوات. وتمثل الطرق المجرّدة الخطوات المتغيرة، بينما توفر الطرق الملموسة السلوك الافتراضي.

public abstract class DataProcessor {
    // Template method — final, defines the algorithm
    public final void process() {
        readData();
        processData();
        writeResult();
    }
    protected abstract void readData();
    protected abstract void processData();
    protected void writeResult() {
        System.out.println("Result written (default)");
    }
}

الفئات الفرعية الملموسة

تملأ كل فئة فرعية الخطوات المجرّدة. ولا يتغير تسلسل طريقة القالب مطلقًا؛ بل يختلف تنفيذ الخطوات الفردية فقط.

public class CSVProcessor extends DataProcessor {
    protected void readData()    { System.out.println("Reading CSV..."); }
    protected void processData() { System.out.println("Parsing CSV rows..."); }
}
public class XMLProcessor extends DataProcessor {
    protected void readData()    { System.out.println("Reading XML..."); }
    protected void processData() { System.out.println("Parsing XML nodes..."); }
    @Override
    protected void writeResult() { System.out.println("Writing XML result."); }
}

طرق الخطاف

الخطاف خطوة اختيارية لها تنفيذ افتراضي، يكون فارغًا غالبًا. ويمكن للفئات الفرعية تجاوز الخطافات لإضافة سلوك اختياري دون إلزامها بتنفيذه.

public abstract class Game {
    public final void play() {
        initialize();
        while (!isDone()) takeTurn();
        printWinner();
    }
    protected void initialize() {}  // hook — optional override
    protected abstract boolean isDone();
    protected abstract void takeTurn();
    protected abstract void printWinner();
}

Template Method مقابل Strategy

تستخدم Template Method الوراثة؛ إذ يثبت الهيكل العام في الفئة الأساسية، وتُتجاوز الخطوات في الفئات الفرعية. أما Strategy فتستخدم التركيب؛ إذ تكون الخوارزمية بأكملها خارجية. تتميز Strategy بمرونة أكبر، بينما تكون Template Method أبسط عندما تشترك الخطوات في قدر كبير من السياق.

Java InputStream كـ Template Method

يُنفَّذ read(byte[], int, int) في java.io.InputStream بالاعتماد على read() المجرّدة. تنفّذ الفئات الفرعية الإصدار الذي يقرأ بايتًا واحدًا، بينما تمثل القراءة متعددة البايتات القالب.

Template Method لإنشاء التقارير

عرّفوا قالبًا للتقرير: اجمعوا البيانات، ونسّقوها، وأخرجوها. بدّلوا الفئات الفرعية لإخراج PDF أو HTML أو CSV دون تغيير منطق التنسيق.

public abstract class ReportGenerator {
    public final String generate() {
        List<Record> data = fetchData();
        String body = format(data);
        return wrap(body);
    }
    protected abstract List<Record> fetchData();
    protected abstract String format(List<Record> data);
    protected String wrap(String body) { return body; } // hook
}

منع تجاوز القالب

صرّحوا عن طريقة القالب باستخدام final لمنع الفئات الفرعية من تغيير بنية الخوارزمية. يجب أن تكون طرق الخطاف والطرق المجرّدة وحدها قابلة للتجاوز.

public final void process() {
    validate(); // abstract
    execute();  // abstract
    cleanup();  // hook with default
}

الخطوات المجرّدة والملموسة

اجعلوا الخطوة مجرّدة عندما يجب أن توفرها الفئة الفرعية. واجعلوها ملموسة، وربما فارغة، عندما يجوز للفئات الفرعية تجاوزها للتخصيص.

Template Method في JUnit

تُعدّ setUp() وtearDown() في JUnit 4 خطافين في طريقة القالب التي يعرّفها مشغّل الاختبارات. ويتحكم المشغّل في توقيت استدعائهما.

Template Method في Spring

يستخدم JdbcTemplate في Spring نمط Template Method داخليًا. يتحكم القالب في الاتصال وإنشاء العبارة والتنظيف؛ بينما توفرون lambda من النوع RowMapper لخطوة «تعيين الصف» المتغيرة.

List<User> users = jdbcTemplate.query(
    "SELECT * FROM users",
    (rs, row) -> new User(rs.getLong("id"), rs.getString("name"))
);

تجنبوا الوراثة العميقة

تعتمد Template Method على الوراثة، مما قد يؤدي إلى تسلسلات هرمية عميقة للفئات. اقتصروا على مستويين أو مستوى واحد. وإذا بدأت الفئات الفرعية في تجاوز خطوات كثيرة بطرق مختلفة، ففكروا في التحول إلى Strategy.

تحقق سريع

ما الكلمة المفتاحية التي تمنع الفئات الفرعية من تغيير تسلسل طريقة القالب؟

مراجعة

يثبت نمط Template Method هيكل الخوارزمية في فئة أساسية باستخدام final. وتنفّذ الفئات الفرعية الخطوات المجرّدة، ويمكنها اختياريًا تجاوز الخطافات. حافظوا على تسلسلات هرمية قصيرة، واستخدموا Strategy عند الحاجة إلى مرونة أكبر.

الأسئلة الشائعة

هل درس «نمط Template Method: تعريف هياكل الخوارزميات» مجاني؟

نعم — نص درس «نمط Template Method: تعريف هياكل الخوارزميات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «نمط Template Method: تعريف هياكل الخوارزميات»؟

عرّف هيكل الخوارزمية في فئة أساسية، ودَع الفئات الفرعية تستكمل الخطوات تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «نمط Template Method: تعريف هياكل الخوارزميات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. نمط Observer: إشعارات الأحداث
  2. نمط Strategy: خوارزميات قابلة للتبديل
  3. نمط Command: تغليف الإجراءات
  4. نمط Template Method: تعريف هياكل الخوارزميات
← العودة إلى Java Academy