Sobes.tech
Junior — Middle

Можете да дадете пример за ситуация, в която системата зависи от абстракцията, а не от конкретните реализации на обектите?

sobes.tech AI

Отговор от AI

В Java често се използва принципът на зависимост от абстракции, а не от конкретни реализации, за да се повиши гъвкавостта и разширяемостта на кода. Например, ако имате интерфейс PaymentProcessor с метода processPayment(), системата може да работи с всяка реализация на този интерфейс — CreditCardProcessor, PayPalProcessor и т.н. Кодът, който използва PaymentProcessor, не зависи от конкретен клас, а само от абстракцията:

public interface PaymentProcessor {
    void processPayment(double amount);
}

public class CreditCardProcessor implements PaymentProcessor {
    public void processPayment(double amount) {
        // реализация на плащане с кредитна карта
    }
}

public class OrderService {
    private PaymentProcessor paymentProcessor;

    public OrderService(PaymentProcessor paymentProcessor) {
        this.paymentProcessor = paymentProcessor;
    }

    public void checkout(double amount) {
        paymentProcessor.processPayment(amount);
    }
}

По този начин, OrderService зависи от абстракцията PaymentProcessor, а не от конкретна реализация, което позволява лесно да се сменя начинът на плащане без да се променя кода на сервиза.