Menu
Coddy logo textTech

Zusammenfassung – Payment Processor

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein vollständiges Zahlungssystem aufbauen, das alle Polymorphismus-Konzepte aus diesem Kapitel zusammenführt. Sie werden verschiedene Zahlungsmethoden erstellen, die über eine einheitliche Schnittstelle funktionieren, einen Prozessor, der jede Zahlungsmethode über Dependency Injection akzeptiert, und mehrere Zahlungen über eine polymorphe Sammlung verarbeiten.

Sie werden Ihren Code in vier Dateien organisieren:

  • payment.go: Definieren Sie ein PaymentMethod Interface, das eine Process(amount float64) string Methode erfordert. Dies ist der Vertrag, den alle Zahlungstypen erfüllen müssen.
  • methods.go: Erstellen Sie drei Zahlungstypen, die jeweils das PaymentMethod Interface implementieren:
    • CreditCard mit den Feldern CardNumber (string) und HolderName (string) — seine Process Methode gibt "Credit Card [last 4 digits of CardNumber] charged $[amount] to [HolderName]" zurück.
    • PayPal mit einem Email Feld — seine Process Methode gibt "PayPal payment of $[amount] from [Email]" zurück.
    • BankTransfer mit den Feldern BankName und AccountNumber — seine Process Methode gibt "Bank transfer of $[amount] via [BankName] (***[last 3 digits of AccountNumber])" zurück.
  • processor.go: Erstellen Sie ein PaymentProcessor Struct, das eine PaymentMethod (injected dependency) hält. Fügen Sie einen Konstruktor NewPaymentProcessor hinzu, der eine PaymentMethod akzeptiert. Fügen Sie eine Methode ExecutePayment(amount float64) string hinzu, die an die injizierte Zahlungsmethode delegiert. Erstellen Sie 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: Lesen Sie die Zahlungsdetails aus der Eingabe ein, erstellen Sie alle drei Zahlungstypen und demonstrieren Sie sowohl Dependency Injection als auch polymorphe Sammlungen. Verwenden Sie zuerst NewPaymentProcessor mit der Kreditkarte und führen Sie eine Zahlung aus. Sammeln Sie dann alle drei Zahlungsmethoden in einem Slice und verwenden Sie ProcessAll, um sie alle mit einem zweiten Betrag zu verarbeiten. Geben Sie 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
  • Zeile 4: Bankname
  • Zeile 5: Kontonummer (z. B. 987654321)
  • Zeile 6: Erster Zahlungsbetrag (für den einzelnen Prozessor)
  • Zeile 7: Zweiter Zahlungsbetrag (für die Stapelverarbeitung)

Formatieren Sie Beträge mit zwei Dezimalstellen. Zum Beispiel, gegeben 4532015112830366, John Smith, john@email.com, Chase, 987654321, 99.99 und 50, sollte Ihre Ausgabe wie folgt 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 durch den injizierten Prozessor. Die verbleibenden drei Zeilen zeigen die Stapelverarbeitung durch die polymorphe Sammlung — dieselbe ProcessAll Funktion verarbeitet alle Zahlungstypen einheitlich und demonstriert, wie Interfaces flexible, 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, drucke dann das Ergebnis

	// TODO: Erstelle ein slice von PaymentMethod, das alle drei Zahlungsarten enthält

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

Alle Lektionen in Objektorientierte Programmierung