بازپرداخت 022 – استخراج اجداد مشترک

سلسله مراتب کلاس خود را روشن و انعطاف پذیر کنید

TL ؛ DR: یک کلاس انتزاعی مشترک را برای تقلید از ساختار دنیای واقعی استخراج کنید.

مشکلات مورد توجه

گام

  1. رفتارهای مشترک را در هر دو کلاس مشخص کنید.

  2. یک کلاس انتزاعی با رفتار مشترک و بدون اجرای ایجاد کنید.

  3. منطق مشترک را به کلاس انتزاعی منتقل کنید.

  4. زیر کلاس ها را برای به ارث بردن از کلاس انتزاعی به روز کنید.

رمز نمونه

پیش از

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() {
       ...

Source link