Menu
Coddy logo textTech

Zusammenfassung – Payment Processor

Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 62 von 110.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Zahlungssystem aufbauen, das die Stärke der Polymorphie demonstriert! Sie werden eine abstrakte Zahlungsmethoden-Klasse und mehrere konkrete Implementierungen erstellen und dann eine Sammlung verschiedener Zahlungstypen über eine einheitliche Schnittstelle verarbeiten.

Sie werden Ihren Code in zwei Dateien organisieren:

  • payments.dart: Definieren Sie hier Ihre Zahlungshierarchie:
    • Eine abstrakte Klasse PaymentMethod mit einer String accountHolder Eigenschaft, einem Konstruktor und einer abstrakten Methode processPayment(double amount)
    • Eine CreditCard Klasse, die PaymentMethod erweitert, mit einer zusätzlichen String cardNumber Eigenschaft (nur die letzten 4 Ziffern). Ihre processPayment Methode sollte Processing $[amount] via Credit Card ****[cardNumber] for [accountHolder] ausgeben
    • Eine PayPal Klasse, die PaymentMethod erweitert, mit einer zusätzlichen String email Eigenschaft. Ihre processPayment Methode sollte Processing $[amount] via PayPal ([email]) for [accountHolder] ausgeben
    • Eine BankTransfer Klasse, die PaymentMethod erweitert, mit einer zusätzlichen String bankName Eigenschaft. Ihre processPayment Methode sollte Processing $[amount] via Bank Transfer from [bankName] for [accountHolder] ausgeben
    Erstellen Sie außerdem eine Funktion processAllPayments(List<PaymentMethod> methods, double amount), die:
    • Processing [count] payments of $[amount] each: ausgibt, wobei count die Anzahl der Zahlungsmethoden ist
    • Jede Zahlungsmethode durchläuft und processPayment(amount) aufruft
    • Nach der Verarbeitung aller Zahlungen zählt, wie viele vom Typ CreditCard sind (unter Verwendung des is Operators), und Credit card payments: [count] ausgibt
  • main.dart: Importieren Sie Ihre Zahlungsdatei und demonstrieren Sie den Zahlungsprozessor:
    • Erstellen Sie eine List<PaymentMethod>, die Folgendes enthält:
      • Eine CreditCard für 'Alice Smith' mit der Kartennummer '1234'
      • Ein PayPal für 'Bob Jones' mit der E-Mail 'bob@email.com'
      • Einen BankTransfer für 'Carol White' mit der Bank 'National Bank'
      • Eine CreditCard für 'David Brown' mit der Kartennummer '5678'
    • Rufen Sie processAllPayments mit dieser Liste und dem Betrag 99.99 auf

Beachten Sie, wie die Funktion processAllPayments mit dem abstrakten Typ PaymentMethod arbeitet, obwohl jede Zahlung gemäß ihrer spezifischen Implementierung verarbeitet wird. Die Typprüfung am Ende zeigt, wie Sie bei Bedarf dennoch spezifische Typen identifizieren können.

Erwartete Ausgabe:

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

Probier es selbst

import 'payments.dart';

void main() {
  // TODO: Erstelle eine List<PaymentMethod>, die Folgendes enthält:
  // - CreditCard für 'Alice Smith' mit der Kartennummer '1234'
  // - PayPal für 'Bob Jones' mit der E-Mail 'bob@email.com'
  // - BankTransfer für 'Carol White' mit der Bank 'National Bank'
  // - CreditCard für 'David Brown' mit der Kartennummer '5678'
  
  // TODO: Rufe processAllPayments mit der Liste und dem Betrag 99.99 auf
}

Alle Lektionen in Objektorientierte Programmierung