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("Иловаи рафтор");
    }
}