package j2.lesson06;
/**
* レシートの骨格を表すクラス.
* @author arakawa
* @version $Id: AbstractReceipt_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public abstract class AbstractReceipt implements Receipt {
private final String[] names;
private final int[] costs;
private int itemCount;
/**
* インスタンスを生成する。
*/
public AbstractReceipt() {
super();
this.names = new String[5];
this.costs = new int[5];
this.itemCount = 0;
}
/**
* レシートに商品を追加する。
* @param name 商品名
* @param cost 価格
*/
public void addItem(String name, int cost) {
this.names[this.itemCount] = name;
this.costs[this.itemCount] = cost;
this.itemCount++;
}
/**
* レシートの内容を表示する。
* このクラスでは、次のように3つのパートに分けた部分を表示するメソッドを呼び出す。
* <pre>
* showHeader();
* showBody();
* showFooter();
* </pre>
* @see #showHeader()
* @see #showBody()
* @see #showFooter()
*/
public void show() {
// show レシート上部
showHeader();
// show レシートの中身
showBody();
// show レシート下部
showFooter();
}
/**
* 合計金額を取得する。
*/
public int getTotalAmount() {
// return total of costs[0..itemCount]
int total = 0;
for (int i = 0; i < this.itemCount; i++) {
total += this.costs[i];
}
return total;
}
/**
* レシートの中身を表示する。
*/
protected void showBody() {
// for i = 0 .. itemCount - 1
for (int i = 0; i < this.itemCount; i++) {
// print names[i], 改行
System.out.println(this.names[i]);
// print " " + costs[i] + "円", 改行
System.out.println(" " + this.costs[i] + "円");
}
// print 改行
System.out.println();
// print "合計:" + 合計金額 + "円"
System.out.println("合計:" + getTotalAmount() + "円");
}
/**
* レシート上部を表示する。
* このメソッドは子クラスで定義される必要がある。
*/
protected abstract void showHeader();
/**
* このメソッドは子クラスで定義される必要がある。
*/
protected abstract void showFooter();
}
|