014-007-009
finalメソッドとテンプレートメソッドパターン
上級
問題説明
finalメソッドとテンプレートメソッドパターン
この問題では: final修飾子を使ったテンプレートメソッドパターンを実装し、AbstractReportクラスのgenerateReport()メソッドがサブクラスでオーバーライドできないことを確認するプログラムを作成します。
学習目標: finalメソッドの役割とテンプレートメソッドパターンの関係を理解する
概要
継承において、親クラスのメソッドにfinal修飾子を付けると、サブクラスでのオーバーライドが禁止されます。テンプレートメソッドパターンでは、処理の骨格をfinalメソッドで定義し、個々のステップを抽象メソッドとしてサブクラスに委譲します。
仕様
AbstractReport クラス(抽象クラス)
finalメソッドgenerateReport(): 以下の順序で3つのメソッドを呼び出すcollectData()- データ収集formatData()- データ整形printReport()- レポート出力
- 抽象メソッド:
collectData(),formatData(),printReport()
SalesReport クラス(AbstractReportを継承)
collectData(): "Collecting sales data..." を出力formatData(): "Formatting sales figures..." を出力printReport(): "=== Sales Report ==="、"Total Sales: $50,000"、"Items Sold: 1,200" を出力
InventoryReport クラス(AbstractReportを継承)
collectData(): "Scanning inventory database..." を出力formatData(): "Organizing inventory items..." を出力printReport(): "=== Inventory Report ==="、"Total Items: 5,000"、"Low Stock: 23" を出力
Main クラス
SalesReportとInventoryReportのインスタンスを作成- それぞれの
generateReport()を呼び出す - 2つのレポートの間に空行を1行出力する
出力形式
Collecting sales data...
Formatting sales figures...
=== Sales Report ===
Total Sales: $50,000
Items Sold: 1,200
Scanning inventory database...
Organizing inventory items...
=== Inventory Report ===
Total Items: 5,000
Low Stock: 23
