شعار ConstructiCat
CodeBust.
تصفح القسم ▾

استبدال التفويض بالوراثة.

المشكلة

تحتوي فئة ما على العديد من الدوال البسيطة التي تفوض العمل إلى جميع دوال فئة أخرى.

الحل

جعل الفئة وارثة للفئة المفوضة، مما يجعل دوال التفويض غير ضرورية.

##مثال

قبل
class Employee {
  private Person person = new Person();

  String getName() { return person.getName(); }
  void setName(String arg) { person.setName(arg); }
}
بعد
class Employee extends Person {
}

##لماذا نعيد الهيكلة

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

في مثل هذه الحالة، إذا استبدلت التفويض بالوراثة، فستقوم بتطهير الفئة من عدد كبير من دوال التفويض وتوفر على نفسك عناء إنشائها لكل دالة جديدة في فئة التفويض.

##الفوائد

  • يقلل من طول الكود. لم تعد كل دوال التفويض هذه ضرورية.

##كيفية إعادة الهيكلة

  1. اجعل الفئة فئة فرعية (subclass) من فئة التفويض.

  2. ضع الكائن الحالي في حقل يحتوي على مرجع لكائن التفويض.

  3. احذف الدوال ذات التفويض البسيط واحدة تلو الأخرى. إذا كانت أسماؤها مختلفة، فاستخدم إعادة تسمية الدالة لمنح جميع الدوال اسمًا موحدًا.

  4. استبدل جميع المراجع إلى حقل التفويض بمراجع إلى الكائن الحالي.

  5. قم بإزالة حقل التفويض.