まとめ - 決済プロセッサ
CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 62/110。
チャレンジ
簡単ポリモーフィズムの力を実証する支払い処理システムを構築しましょう!抽象的な支払い方法クラスといくつかの具体的な実装を作成し、統一されたインターフェースを通じて異なる支払いタイプのコレクションを処理します。
コードを2つのファイルに整理します:
payments.dart: ここで支払いの階層を定義します:String accountHolderプロパティ、コンストラクタ、および抽象メソッドprocessPayment(double amount)を持つ抽象クラスPaymentMethodPaymentMethodを継承し、追加のString cardNumberプロパティ(下4桁のみ)を持つCreditCardクラス。そのprocessPaymentはProcessing $[amount] via Credit Card ****[cardNumber] for [accountHolder]と出力する必要がありますPaymentMethodを継承し、追加のString emailプロパティを持つPayPalクラス。そのprocessPaymentはProcessing $[amount] via PayPal ([email]) for [accountHolder]と出力する必要がありますPaymentMethodを継承し、追加のString bankNameプロパティを持つBankTransferクラス。そのprocessPaymentはProcessing $[amount] via Bank Transfer from [bankName] for [accountHolder]と出力する必要があります
processAllPayments(List<PaymentMethod> methods, double amount)を作成してください:Processing [count] payments of $[amount] each:と出力します(count は支払い方法の数)- 各支払い方法をループで処理し、
processPayment(amount)を呼び出します - すべての支払いを処理した後、
is演算子を使用してCreditCardタイプの数をカウントし、Credit card payments: [count]と出力します
main.dart: 支払いファイルをインポートし、支払いプロセッサを実演します:- 以下を含む
List<PaymentMethod>を作成します:'Alice Smith'のCreditCard、カード番号は'1234''Bob Jones'のPayPal、メールは'bob@email.com''Carol White'のBankTransfer、銀行名は'National Bank''David Brown'のCreditCard、カード番号は'5678'
- このリストと金額
99.99を指定してprocessAllPaymentsを呼び出します
- 以下を含む
processAllPayments 関数が抽象的な PaymentMethod 型をどのように扱っているか、そして各支払いがその具体的な実装に従ってどのように処理されるかに注目してください。最後の型チェックは、必要に応じて特定の型を識別する方法を示しています。
期待される出力:
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自分で試してみよう
import 'payments.dart';
void main() {
// TODO: 以下の内容を含む List<PaymentMethod> を作成してください:
// - 'Alice Smith' の CreditCard、カード番号 '1234'
// - 'Bob Jones' の PayPal、メールアドレス 'bob@email.com'
// - 'Carol White' の BankTransfer、銀行名 'National Bank'
// - 'David Brown' の CreditCard、カード番号 '5678'
// TODO: 作成したリストと金額 99.99 を指定して processAllPayments を呼び出してください
}
オブジェクト指向プログラミングのすべてのレッスン
4Null Safety
Null Safety 入門Nullable と Non-Nullable? 演算子と ! 演算子late キーワードと Null SafetyNull-Aware 演算子クラスにおける Null Safetyまとめ:ユーザープロフィールシステム10コレクションとジェネリクス
List, Set, Map の概要型安全なコレクションジェネリッククラスジェネリックメソッドジェネリクスの制約Iterable と Iteratorまとめ:ジェネリックなストレージ