3) Реализации (OCP + LSP)

3) Реализации (OCP + LSP)


// 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); } }

Автор: к.п.н., Румянцев Сергей Александрович, доцент Финансового университета при Правительстве РФ; доцент ОЧУВО Международного инновационного университета; Консалтинг, управление разработкой ПО; системный и бизнес анализ; менеджмент; аналитиз данных; управление ИТ. Телефон для связи +79269444818 (мессенджеры)   Короткая ссылка:

3) Реализации (OCP + LSP)


// 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); } }

https://webprogr.ru/~lH3gF
Короткая ссылка на новость:https://webprogr.ru/~lH3gF


// Пример кода
function hello(name) {
  console.log(`Hi, ${name}!`);
}
hello("Sergey");

Последние новости

Рейтинг@Mail.ru