Menu
CoddyTech

Rangkuman: Pemroses Pembayaran

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 46 dari 107.

challenge icon

Tantangan

Mudah

Mari kita bangun sistem pemrosesan pembayaran lengkap yang menyatukan semua konsep polimorfisme dari bab ini. Kamu akan membuat berbagai method pembayaran yang bekerja melalui interface terpadu, processor yang menerima method pembayaran apa pun melalui injeksi dependensi, dan memproses beberapa pembayaran melalui koleksi polimorfik.

Kamu akan mengatur kodemu dalam empat file:

  • payment.go: Definisikan interface PaymentMethod yang mewajibkan method Process(amount float64) string. Ini adalah kontrak yang harus dipenuhi oleh semua tipe pembayaran.
  • methods.go: Buat tiga tipe pembayaran yang masing-masing mengimplementasikan interface PaymentMethod:
    • CreditCard dengan field CardNumber (string) dan HolderName (string). Method Process-nya mengembalikan Credit Card [last 4 digits of CardNumber] charged $[amount] to [HolderName]
    • PayPal dengan field Email. Method Process-nya mengembalikan PayPal payment of $[amount] from [Email]
    • BankTransfer dengan field BankName dan AccountNumber. Method Process-nya mengembalikan Bank transfer of $[amount] via [BankName] (***[last 3 digits of AccountNumber])
  • processor.go: Buat struct PaymentProcessor yang menyimpan PaymentMethod (dependensi yang diinjeksi). Sertakan konstruktor NewPaymentProcessor yang menerima PaymentMethod. Tambahkan method ExecutePayment(amount float64) string yang meneruskan pemrosesan ke method pembayaran yang diinjeksi. Buat juga fungsi ProcessAll(payments []PaymentMethod, amount float64) []string yang memproses jumlah yang sama melalui setiap method pembayaran dalam slice dan mengembalikan semua hasil.
  • main.go: Baca detail pembayaran dari input, buat ketiga tipe pembayaran, lalu tunjukkan injeksi dependensi dan koleksi polimorfik. Pertama, gunakan NewPaymentProcessor dengan kartu kredit dan jalankan pembayaran. Kemudian, kumpulkan ketiga method pembayaran ke dalam slice dan gunakan ProcessAll untuk memproses semuanya dengan jumlah kedua. Cetak setiap hasil pada barisnya sendiri.

Input berikut akan diberikan:

  • Baris 1: Nomor kartu kredit (misalnya, 4532015112830366)
  • Baris 2: Nama pemegang kartu
  • Baris 3: Email PayPal
  • Baris 4: Nama bank
  • Baris 5: Nomor rekening (misalnya, 987654321)
  • Baris 6: Jumlah pembayaran pertama (untuk processor tunggal)
  • Baris 7: Jumlah pembayaran kedua (untuk pemrosesan batch)

Format jumlah dengan dua angka desimal. Misalnya, jika inputnya adalah 4532015112830366, John Smith, john@email.com, Chase, 987654321, 99.99, dan 50, outputmu seharusnya:

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)

Baris pertama menampilkan pembayaran tunggal melalui processor yang diinjeksi. Tiga baris berikutnya menampilkan pemrosesan batch melalui koleksi polimorfik: fungsi ProcessAll yang sama menangani semua tipe pembayaran secara seragam, menunjukkan bagaimana interface memungkinkan sistem pembayaran yang fleksibel dan mudah dikembangkan.

Coba sendiri

package main

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

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

	// Baca input
	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: Buat tiga tipe pembayaran (CreditCard, PayPal, BankTransfer)

	// TODO: Buat PaymentProcessor untuk kartu kredit menggunakan NewPaymentProcessor
	// dan lakukan pembayaran dengan amount1, lalu cetak hasilnya

	// TODO: Buat slice PaymentMethod yang berisi ketiga tipe pembayaran

	// TODO: Gunakan ProcessAll untuk memproses semua pembayaran dengan amount2
	// dan cetak setiap hasil pada baris terpisah
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online