Sobes.tech
Junior — Middle

შეგიძლიათ ახსნათ Adapter და Decorator ნიმუშების განსხვავებები პროგრამული უზრუნველყოფის დიზაინის კონტექსტში?

sobes.tech AI

პასუხი AI-სგან

საბავშვო ნიმუშები Adapter და Decorator ხშირად იშლება, მაგრამ მათ სხვადასხვა მიზნები და გამოყენების მეთოდები აქვთ:

  • Adapter (მორგებელი) — ემსახურება კლასის ინტერფეისის გარდაქმნას იმ ინტერფეისად, რომელიც მომხმარებელი ელოდება. გამოიყენება, როდესაც საჭიროა შეუთავსებელი ინტერფეისების ერთობლივი მუშაობა. მორგებელი ხვდება ობიექტს და თარგმნის მომხმარებლის ზარებს მორგებულ ობიექტზე.

  • Decorator (დეკორატორი) — განკუთვნილია დინამიურად ახალი პასუხისმგებლობების დამატებისთვის ობიექტს მისი ინტერფეისის შეცვლის გარეშე. დეკორატორი ხვდება ობიექტს და აფართოებს ან იცვლის მის ქცევას.

ძირითადი განსხვავებები:

  • მორგებელი იცვლის ობიექტის ინტერფეისს, რათა ის იყოს თავსებადი მომხმარებელთან.
  • დეკორატორი ინარჩუნებს ობიექტის ინტერფეისს, მაგრამ დამატებით ახალ ქცევას აძლევს.

Java-ს მაგალითი:

// მორგებელი: ინტერფეისის ადაპტაცია
interface Target {
    void request();
}

class Adaptee {
    void specificRequest() {
        System.out.println("სპეციფიკური მოთხოვნა");
    }
}

class Adapter implements Target {
    private Adaptee adaptee;
    Adapter(Adaptee a) { this.adaptee = a; }
    public void request() {
        adaptee.specificRequest();
    }
}

// დეკორატორი: ქცევის დამატება
interface Component {
    void operation();
}

class ConcreteComponent implements Component {
    public void operation() {
        System.out.println("ძირითადი ოპერაცია");
    }
}

class Decorator implements Component {
    protected Component component;
    Decorator(Component c) { this.component = c; }
    public void operation() {
        component.operation();
    }
}

class ConcreteDecorator extends Decorator {
    ConcreteDecorator(Component c) { super(c); }
    public void operation() {
        super.operation();
        System.out.println("დამატებითი ქცევა");
    }
}