Итоги — Платежная система
Часть раздела Объектно-ориентированное программирование путешествия по Java на Coddy — урок 40 из 87.
Задание
ЛегкоДавайте создадим полноценную систему обработки платежей, которая объединит все, что вы узнали об интерфейсах в этой главе. Вы создадите гибкую систему, в которой различные способы оплаты могут обрабатываться единообразно через общий интерфейс.
Вы организуете свой код в пяти файлах:
Payable.java: Определите основной интерфейс, который должны реализовать все способы оплаты. Он должен объявлять один методpay(double amount), который возвращает String, описывающую действие по оплате.CreditCard.java: Создайте класс, реализующийPayable, который представляет платежи по кредитным картам. CreditCard имеет полеcardNumber(String), в котором хранятся последние 4 цифры. Включите конструктор для его инициализации. Методpayдолжен возвращать:Paid [amount] using Credit Card ending in [cardNumber]PayPal.java: Создайте еще один класс, реализующийPayableдля платежей PayPal. Аккаунт PayPal имеет полеemail(String). Включите конструктор для его инициализации. Методpayдолжен возвращать:Paid [amount] via PayPal account [email]PaymentProcessor.java: Создайте класс процессора, который может обрабатывать любой объектPayable. У него должен быть методprocessPayment(Payable paymentMethod, double amount), который вызывает методpayспособа оплаты и возвращает результат. Это демонстрирует, как интерфейсы обеспечивают полиморфное поведение — процессору не нужно знать конкретный тип платежа!Main.java: Соберите все вместе. Вы получите три входных данных: номер карты (последние 4 цифры), адрес электронной почты и сумму платежа. СоздайтеPaymentProcessor, затем используйте его для обработки платежей как с помощьюCreditCard, так и с помощью аккаунтаPayPalна заданную сумму. Выведите каждый результат на отдельной строке.
Вы получите три входных значения: последние 4 цифры номера карты (String), адрес электронной почты PayPal (String) и сумму платежа (double).
Форматируйте суммы с двумя знаками после запятой в вашем выводе. Обратите внимание, как один и тот же PaymentProcessor обрабатывает совершенно разные типы платежей благодаря силе интерфейсов!
Попробуйте сами
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Чтение входных данных
String cardNumber = scanner.nextLine(); // Последние 4 цифры
String email = scanner.nextLine(); // Электронная почта PayPal
double amount = scanner.nextDouble(); // Сумма платежа
// TODO: Создать PaymentProcessor
// TODO: Создать CreditCard с номером cardNumber
// TODO: Создать аккаунт PayPal с электронной почтой email
// TODO: Обработать платеж с помощью CreditCard и вывести результат
// TODO: Обработать платеж с помощью PayPal и вывести результат
}
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово thisМетодыПоля (атрибуты)Метод-конструкторПерегрузка конструкторовИтоги — Простой калькулятор4Наследование
Основы наследования (extends)Ключевое слово superПереопределение методов (@Override)Цепочка конструкторовКласс ObjectОдиночное и многоуровневое наследованиеПочему нет множественного наследования классовИтоги — Иерархия сотрудников7Специальные методы и класс Object
Метод toString()equals() и hashCode()Метод clone()compareTo() и ComparableИнтерфейс ComparatorПовторение — Кастомная сортировка2Модификаторы доступа и инкапсуляция
Обзор уровней доступаМетоды геттеры и сеттерыСокрытие данныхКлючевое слово finalИтоги — Менеджер банковского счета5Полиморфизм
Основы перегрузки методовПереопределение методов (Run-Time)Upcasting и DowncastingОператор instanceofАбстрактные классы и методыИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияАгрегация против композицииВнутренние, вложенные и анонимные классыEnums и методы перечисленийRecords (Java 16+)Sealed-классы (Java 17+)11Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн BuilderПаттерн ObserverПаттерн Strategy3Свойства класса и статические члены
Переменные экземпляра и статические переменныеСтатические методыСтатические блокиКонстанты (static final)Итоги: Счетчик и утилиты6Интерфейсы и абстрактные классы
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовDefault и Static методы в интерфейсахАбстрактные классы vs ИнтерфейсыФункциональные интерфейсыИтоги — Платежная система9Обобщения
Введение в обобщенияОбобщенные классыОбобщенные методыОграниченные параметры типаСимволы подстановки (Wildcards: ?, extends, super)Итоги — Обобщенный контейнер12Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»Паттерн «Итератор»