018 オブジェクト指向の深化(インターフェイスと抽象クラスの利用) 004 解答例

// OrderProcessor クラス(抽象クラス)
abstract class OrderProcessor {
    // 注文の合計金額を計算する抽象メソッド
    abstract double calculateTotalCost();

    // 支払いを処理する抽象メソッド
    abstract void processPayment();
}

// CreditCardPaymentProcessor クラス(具象クラス)
class CreditCardPaymentProcessor extends OrderProcessor {
    // クレジットカードを認証するメソッド
    void authorizeCreditCard() {
        // クレジットカード認証の具体的な処理
    }

    // 注文の合計金額を計算するメソッドの実装
    @Override
    double calculateTotalCost() {
        // 合計金額の計算の具体的な処理
        return 0.0;
    }

    // 支払いを処理するメソッドの実装
    @Override
    void processPayment() {
        authorizeCreditCard();
        // クレジットカード支払いの処理
        System.out.println("Processing credit card payment");
    }
}

// PayPalPaymentProcessor クラス(具象クラス)
class PayPalPaymentProcessor extends OrderProcessor {
    // PayPal アカウントを確認するメソッド
    void verifyPayPalAccount() {
        // PayPal アカウント確認の具体的な処理
    }

    // 注文の合計金額を計算するメソッドの実装
    @Override
    double calculateTotalCost() {
        // 合計金額の計算の具体的な処理
        return 0.0;
    }

    // 支払いを処理するメソッドの実装
    @Override
    void processPayment() {
        verifyPayPalAccount();
        // PayPal 支払いの処理
        System.out.println("Processing PayPal payment");
    }
}

// OnlineOrder クラス(具象クラス)
class OnlineOrder extends OrderProcessor {
    // 商品リストのメンバー変数
    private List<Item> itemList;

    // コンストラクタ
    public OnlineOrder(List<Item> itemList) {
        this.itemList = itemList;
    }

    // 商品を発送するメソッドの実装
    void shipOrder() {
        // 商品の発送の具体的な処理
        System.out.println("Shipping items");
    }

    // 注文の合計金額を計算するメソッドの実装
    @Override
    double calculateTotalCost() {
        // 合計金額の計算の具体的な処理
        return 0.0;
    }

    // 支払いを処理するメソッドの実装
    @Override
    void processPayment() {
        // 注文に関する支払い処理の具体的な実装
        System.out.println("Processing payment for online order");
    }
}

// 商品を表す Item クラス(例)
class Item {
    // 商品に関する情報やメソッドの定義
}

この解答例では、OrderProcessor クラスが注文処理に関する共通のメソッドを提供し、具象クラスである CreditCardPaymentProcessorPayPalPaymentProcessor はそれぞれクレジットカード支払いと PayPal 支払いに特有の処理を提供します。また、OnlineOrder クラスは商品リストを持ち、商品の発送に関する特有の処理を提供します。これにより、オンラインショッピングの注文処理が柔軟で拡張可能な設計となります。

「018 オブジェクト指向の深化」問題集リスト