رفع متن الباني (Pull Up Constructor Body).
Your subclasses have constructors with code that’s mostly identical.
أنشئ بانيًا للفئة الفائقة (Superclass) وانقل الكود المشترك في الفئات الفرعية إليه. واستدعِ باني الفئة الفائقة في بانيات الفئات الفرعية.
##Example
class Manager extends Employee {
public Manager(String name, String id, int grade) {
this.name = name;
this.id = id;
this.grade = grade;
}
// ...
}class Manager extends Employee {
public Manager(String name, String id, int grade) {
super(name, id);
this.grade = grade;
}
// ...
}##Why Refactor
كيف تختلف تقنية إعادة الهيكلة هذه عن تقنية رفع التابع (Pull Up Method)؟
-
في لغة Java، لا يمكن للفئات الفرعية وراثة الباني، لذا لا يمكنك ببساطة تطبيق تقنية رفع التابع (Pull Up Method) على باني الفئة الفرعية وحذفه بعد نقل كل الكود إلى الفئة الفائقة. بالإضافة إلى إنشاء باني في الفئة الفائقة، من الضروري وجود بانيات في الفئات الفرعية تقوم بالتفويض البسيط لباني الفئة الفائقة.
-
في لغتي C++ وJava (إذا لم تستدعِ باني الفئة الفائقة صراحة)، يتم استدعاء باني الفئة الفائقة تلقائياً قبل باني الفئة الفرعية، مما يجعل من الضروري نقل الكود المشترك فقط من بداية بانيات الفئات الفرعية (حيث لن تتمكن من استدعاء باني الفئة الفائقة من مكان عشوائي في باني الفئة الفرعية).
-
في معظم لغات البرمجة، يمكن أن يحتوي باني الفئة الفرعية على قائمة معاملات خاصة به تختلف عن معاملات الفئة الفائقة. لذلك، يجب إنشاء باني الفئة الفائقة فقط مع المعاملات التي يحتاجها حقاً.
##How to Refactor
-
أنشئ بانيًا (Constructor) في الفئة الفائقة (Superclass).
-
استخرج الكود المشترك من بداية باني كل فئة فرعية إلى باني الفئة الفائقة. وقبل القيام بذلك، حاول نقل أكبر قدر ممكن من الكود المشترك إلى بداية الباني.
-
ضع استدعاء باني الفئة الفائقة في السطر الأول من بانيات الفئات الفرعية.