Menu
Coddy logo textTech

Zusammenfassung – Zahlungsprozessor

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy. Lektion 46 von 107.

challenge icon

Aufgabe

Einfach

Erstellen wir ein vollständiges Zahlungsabwicklungssystem, das alle Polymorphie-Konzepte aus diesem Kapitel zusammenführt. Du wirst verschiedene Zahlungsmethoden erstellen, die über eine einheitliche Schnittstelle funktionieren, einen Prozessor, der jede Zahlungsmethode per Abhängigkeitsinjektion akzeptiert, und mehrere Zahlungen über eine polymorphe Sammlung verarbeiten.

Du wirst deinen Code auf vier Dateien verteilen:

  • payment.go: Definiere eine PaymentMethod-Schnittstelle, die eine Methode Process(amount float64) string erfordert. Dies ist der Vertrag, den alle Zahlungsarten erfüllen müssen.
  • methods.go: Erstelle drei Zahlungsarten, die jeweils die PaymentMethod-Schnittstelle implementieren:
    • CreditCard mit den Feldern CardNumber (string) und HolderName (string). Ihre Process-Methode gibt Credit Card [last 4 digits of CardNumber] charged $[amount] to [HolderName] zurück.
    • PayPal mit einem Feld Email. Ihre Process-Methode gibt PayPal payment of $[amount] from [Email] zurück.
    • BankTransfer mit den Feldern BankName und AccountNumber. Ihre Process-Methode gibt Bank transfer of $[amount] via [BankName] (***[last 3 digits of AccountNumber]) zurück.
  • processor.go: Erstelle eine PaymentProcessor-Struktur, die eine PaymentMethod (injizierte Abhängigkeit) enthält. Füge einen Konstruktor NewPaymentProcessor hinzu, der eine PaymentMethod akzeptiert. Füge eine Methode ExecutePayment(amount float64) string hinzu, die die Verarbeitung an die injizierte Zahlungsmethode delegiert. Erstelle außerdem eine Funktion ProcessAll(payments []PaymentMethod, amount float64) []string, die denselben Betrag über jede Zahlungsmethode im Slice verarbeitet und alle Ergebnisse zurückgibt.
  • main.go: Lies die Zahlungsdetails aus der Eingabe ein, erstelle alle drei Zahlungsarten und demonstriere sowohl Abhängigkeitsinjektion als auch polymorphe Sammlungen. Verwende zuerst NewPaymentProcessor mit der Kreditkarte und führe eine Zahlung aus. Sammle anschließend alle drei Zahlungsmethoden in einem Slice und verwende ProcessAll, um sie alle mit einem zweiten Betrag zu verarbeiten. Gib jedes Ergebnis in einer eigenen Zeile aus.

Die folgenden Eingaben werden bereitgestellt:

  • Zeile 1: Kreditkartennummer (z. B. 4532015112830366)
  • Zeile 2: Name des Karteninhabers
  • Zeile 3: PayPal-E-Mail-Adresse
  • Zeile 4: Name der Bank
  • Zeile 5: Kontonummer (z. B. 987654321)
  • Zeile 6: Erster Zahlungsbetrag (für den einzelnen Prozessor)
  • Zeile 7: Zweiter Zahlungsbetrag (für die Stapelverarbeitung)

Formatiere die Beträge mit zwei Dezimalstellen. Wenn beispielsweise 4532015112830366, John Smith, john@email.com, Chase, 987654321, 99.99 und 50 angegeben werden, sollte deine Ausgabe folgendermaßen aussehen:

Credit Card 0366 charged $99.99 to John Smith
Credit Card 0366 charged $50.00 to John Smith
PayPal payment of $50.00 from john@email.com
Bank transfer of $50.00 via Chase (***321)

Die erste Zeile zeigt die einzelne Zahlung über den injizierten Prozessor. Die verbleibenden drei Zeilen zeigen die Stapelverarbeitung über die polymorphe Sammlung: Dieselbe Funktion ProcessAll verarbeitet alle Zahlungsarten einheitlich und demonstriert, wie Schnittstellen flexible und erweiterbare Zahlungssysteme ermöglichen.

Probier es selbst

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Eingabe lesen
	cardNumber, _ := reader.ReadString('\n')
	cardNumber = strings.TrimSpace(cardNumber)

	holderName, _ := reader.ReadString('\n')
	holderName = strings.TrimSpace(holderName)

	email, _ := reader.ReadString('\n')
	email = strings.TrimSpace(email)

	bankName, _ := reader.ReadString('\n')
	bankName = strings.TrimSpace(bankName)

	accountNumber, _ := reader.ReadString('\n')
	accountNumber = strings.TrimSpace(accountNumber)

	amount1Str, _ := reader.ReadString('\n')
	amount1Str = strings.TrimSpace(amount1Str)
	amount1, _ := strconv.ParseFloat(amount1Str, 64)

	amount2Str, _ := reader.ReadString('\n')
	amount2Str = strings.TrimSpace(amount2Str)
	amount2, _ := strconv.ParseFloat(amount2Str, 64)

	// TODO: Erstelle die drei Zahlungsarten (CreditCard, PayPal, BankTransfer)

	// TODO: Erstelle einen PaymentProcessor mit der Kreditkarte unter Verwendung von NewPaymentProcessor
	// und führe eine Zahlung mit amount1 aus, dann gib das Ergebnis aus

	// TODO: Erstelle einen Slice von PaymentMethod, der alle drei Zahlungsarten enthält

	// TODO: Verwende ProcessAll, um alle Zahlungen mit amount2 zu verarbeiten
	// und gib jedes Ergebnis in einer eigenen Zeile aus
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Go-Compiler