Sobes.tech
Junior — Middle

Können Sie ein Beispiel für eine Situation geben, in der das System von der Abstraktion abhängt und nicht von konkreten Implementierungen von Objekten?

sobes.tech KI

Antwort von 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, а не от конкретной реализации, что позволяет легко менять способ оплаты без изменения кода сервиса.