// OCP+LSP: можно подставить любую оплату/уведомление без изменения сервисов public final class CardPayment implements Payment { @Override public PaymentResult pay(Money amount) { // ... вызов платёжного шлюза ... return new PaymentResult(true, "tx-card-123", "Paid by card"); } } public final class PaypalPayment implements Payment { @Override public PaymentResult pay(Money amount) { return new PaymentResult(true, "tx-pp-987", "Paid by PayPal"); } } public final class EmailNotifier implements Notifier { @Override public void send(String to, String message) { System.out.printf("EMAIL → %s :: %s%n", to, message); } } public final class SmsNotifier implements Notifier { @Override public void send(String to, String message) { System.out.printf("SMS → %s :: %s%n", to, message); } } public final class NoDiscount implements DiscountPolicy { @Override public Money apply(Money amount) { return amount; } } public final class TenPercentDiscount implements DiscountPolicy { @Override public Money apply(Money amount) { var d = amount.amount().multiply(java.math.BigDecimal.valueOf(0.9)); return new Money(amount.currency(), d); } } public final class InMemoryOrderRepository implements OrderRepository { private final java.util.Map<String, Order> storage = new java.util.concurrent.ConcurrentHashMap<>(); @Override public void save(Order order) { storage.put(order.id(), order); } }
// OCP+LSP: можно подставить любую оплату/уведомление без изменения сервисов public final class CardPayment implements Payment { @Override public PaymentResult pay(Money amount) { // ... вызов платёжного шлюза ... return new PaymentResult(true, "tx-card-123", "Paid by card"); } } public final class PaypalPayment implements Payment { @Override public PaymentResult pay(Money amount) { return new PaymentResult(true, "tx-pp-987", "Paid by PayPal"); } } public final class EmailNotifier implements Notifier { @Override public void send(String to, String message) { System.out.printf("EMAIL → %s :: %s%n", to, message); } } public final class SmsNotifier implements Notifier { @Override public void send(String to, String message) { System.out.printf("SMS → %s :: %s%n", to, message); } } public final class NoDiscount implements DiscountPolicy { @Override public Money apply(Money amount) { return amount; } } public final class TenPercentDiscount implements DiscountPolicy { @Override public Money apply(Money amount) { var d = amount.amount().multiply(java.math.BigDecimal.valueOf(0.9)); return new Money(amount.currency(), d); } } public final class InMemoryOrderRepository implements OrderRepository { private final java.util.Map<String, Order> storage = new java.util.concurrent.ConcurrentHashMap<>(); @Override public void save(Order order) { storage.put(order.id(), order); } }
// Пример кода
function hello(name) {
console.log(`Hi, ${name}!`);
}
hello("Sergey");