Menu
Coddy logo textTech

Podsumowanie — procesor płatności

Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 62 z 110.

challenge icon

Wyzwanie

Łatwy

Zbudujmy system przetwarzania płatności, który zademonstruje potęgę polimorfizmu! Utworzysz abstrakcyjną klasę metody płatności i kilka konkretnych implementacji, a następnie przetworzysz kolekcję różnych typów płatności za pomocą jednego interfejsu.

Podzielisz kod na dwa pliki:

  • payments.dart: Zdefiniuj tutaj hierarchię metod płatności:
    • Abstrakcyjna klasa PaymentMethod z właściwością String accountHolder, konstruktorem i metodą abstrakcyjną processPayment(double amount)
    • Klasa CreditCard, która rozszerza PaymentMethod o dodatkową właściwość String cardNumber (tylko 4 ostatnie cyfry). Jej metoda processPayment powinna wyświetlać Processing $[amount] via Credit Card ****[cardNumber] for [accountHolder]
    • Klasa PayPal, która rozszerza PaymentMethod o dodatkową właściwość String email. Jej metoda processPayment powinna wyświetlać Processing $[amount] via PayPal ([email]) for [accountHolder]
    • Klasa BankTransfer, która rozszerza PaymentMethod o dodatkową właściwość String bankName. Jej metoda processPayment powinna wyświetlać Processing $[amount] via Bank Transfer from [bankName] for [accountHolder]
    Utwórz też funkcję processAllPayments(List<PaymentMethod> methods, double amount), która:
    • Wyświetla Processing [count] payments of $[amount] each:, gdzie count to liczba metod płatności
    • Iteruje przez każdą metodę płatności i wywołuje processPayment(amount)
    • Po przetworzeniu wszystkich płatności zlicza, ile z nich jest typu CreditCard, używając operatora is, i wyświetla Credit card payments: [count]
  • main.dart: Zaimportuj plik z metodami płatności i zaprezentuj procesor płatności:
    • Utwórz List<PaymentMethod> zawierającą:
      • CreditCard dla 'Alice Smith' z numerem karty '1234'
      • PayPal dla 'Bob Jones' z adresem e-mail 'bob@email.com'
      • BankTransfer dla 'Carol White' z bankiem 'National Bank'
      • CreditCard dla 'David Brown' z numerem karty '5678'
    • Wywołaj processAllPayments z tą listą i kwotą 99.99

Zwróć uwagę, że funkcja processAllPayments działa z abstrakcyjnym typem PaymentMethod, a mimo to każda płatność jest przetwarzana zgodnie z jej konkretną implementacją. Sprawdzanie typów na końcu pokazuje, że w razie potrzeby nadal możesz rozpoznawać konkretne typy.

Oczekiwany wynik:

Processing 4 payments of $99.99 each:
Processing $99.99 via Credit Card ****1234 for Alice Smith
Processing $99.99 via PayPal (bob@email.com) for Bob Jones
Processing $99.99 via Bank Transfer from National Bank for Carol White
Processing $99.99 via Credit Card ****5678 for David Brown
Credit card payments: 2

Spróbuj swoich sił

import 'payments.dart';

void main() {
  // TODO: Utwórz List<PaymentMethod> zawierającą:
  // - CreditCard dla 'Alice Smith' z numerem karty '1234'
  // - PayPal dla 'Bob Jones' z adresem e-mail 'bob@email.com'
  // - BankTransfer dla 'Carol White' z bankiem 'National Bank'
  // - CreditCard dla 'David Brown' z numerem karty '5678'
  
  // TODO: Wywołaj processAllPayments z listą i kwotą 99.99
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Dart online