سلسله مراتب کلاس خود را روشن و انعطاف پذیر کنید
TL ؛ DR: یک کلاس انتزاعی مشترک را برای تقلید از ساختار دنیای واقعی استخراج کنید.
مشکلات مورد توجه
گام
-
رفتارهای مشترک را در هر دو کلاس مشخص کنید.
-
یک کلاس انتزاعی با رفتار مشترک و بدون اجرای ایجاد کنید.
-
منطق مشترک را به کلاس انتزاعی منتقل کنید.
-
زیر کلاس ها را برای به ارث بردن از کلاس انتزاعی به روز کنید.
رمز نمونه
پیش از
class Car {
void drive() {
System.out.println("Driving a car");
}
}
class Truck extends Car {
void load() {
System.out.println("Loading cargo");
}
void unload() {
System.out.println("Unloading cargo");
}
}
// Truck reuses driving method
// Overriding it would be another code smell
// Violating Liskov Substitution rule
پس از
abstract class Vehicle {
// 2. Create an abstract class
// with shared behavior and no implementation
abstract void drive();
// 1. Identify common behaviors in both classes
// 3. Move common logic to the abstract class
}
class Car extends Vehicle {
// 4. Update subclasses to inherit from the abstract class
void drive() {
System.out.println("Driving a car");
}
}
class Truck extends Vehicle {
// 4. Update subclasses to inherit from the abstract class
void drive() {
...