Powtórzenie – metody płatności
Część sekcji Programowanie obiektowe ścieżki Kotlin w Coddy. Lekcja 26 z 57.
Wyzwanie
ŚredniProjektuj metody płatności w oparciu o interfejs.
PaymentMethodwymaganame,fee(amount),pay(amount)(zwraca informację, czy płatność się powiodła) istatus(), a także udostępnia domyślną metodętotal(amount): kwotę powiększoną o opłatę.Card(nazwacard) pobiera opłatę w wysokości 2% (zaokrągloną w dół), zawsze przyjmuje płatność i zlicza płatności:card: 2 payment(s).Wallet(balance)(nazwawallet) nie pobiera opłaty i przyjmuje płatność tylko wtedy, gdy saldo pokrywa całą kwotę wraz z opłatą; następnie ją odejmuje:wallet: 50 left.GiftCard(balance)(nazwagift card) również nie pobiera opłaty, ale przyjmuje płatność tylko w przypadku kwot nieprzekraczających 100 i tylko wtedy, gdy saldo je pokrywa:gift card: 40 left.
Następnie uzupełnij checkout(amount, methods), która próbuje użyć kolejno każdej metody PaymentMethod i zwraca paid 100 with wallet (total 100) dla pierwszej metody, która przyjmie płatność, lub declined, jeśli żadna jej nie przyjmie.
Dostarczony kod odczytuje metody w postaci card,wallet:150,gift:120, a następnie jedną kwotę w każdym wierszu, wyświetla wynik każdej płatności i na końcu status status() każdej metody.
Twój kod umieść w plikach PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt i Functions.kt. Main.kt zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
fun main() {
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
val input = generateSequence(::readLine).toList()
val methods = input[0].split(",").map { spec ->
val p = spec.split(":")
when (p[0]) {
"card" -> Card()
"wallet" -> Wallet(p[1].toInt())
else -> GiftCard(p[1].toInt())
}
}
for (line in input.drop(1)) println(checkout(line.toInt(), methods))
for (m in methods) println(m.status())
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasKonstruktory główneBloki init i walidacjaKonstruktory dodatkowePodsumowanie — karta biblioteczna4Dziedziczenie
Klasy otwarte i podklasyNadpisywanie składowychsuper i konstruktoryKlasy abstrakcyjnePodsumowanie – katalog pracowników7Klasy specjalne
Klasy danychKlasy wyliczenioweHierarchie zapieczętowaneequals, hashCode, toStringPodsumowanie — śledzenie zamówień10Wzorce projektowe, część 2
Delegowanie za pomocą byWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Właściwości i hermetyzacja
Własne akcesoryModyfikatory widocznościPrywatne setterylazy i lateinitPowtórka – konto bankowe5Interfejsy
Deklarowanie interfejsówMetody domyślneWiele interfejsówInterfejsy jako typyPowtórzenie – metody płatności8Typy generyczne
Funkcje generyczneKlasy generyczneOgraniczenia typówKowariancja i kontrawariancja: in i outPodsumowanie — kolejka priorytetowa11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Kotlin