演習問題2(ショッピングカート 一覧)


演習問題2-4 (Abstract Factory)

演習問題2-3 では、List のサブクラスと、Format のサブクラスを組み合わせて自由に書式を変更できるようにしましたが、その組み合わせはあらかじめ決まっていました(ソースファイルで指定しています)。これを実行時に指定できるように変更しなさい。


実行結果
list ? n
format ? c
牛肉*
トマト
list ? d
format ? h
<table>
<tr><td>牛肉</td><td>1,580円</td><td>400g</td></tr>
<tr><td>トマト</td><td>276円</td><td>4個</td></tr>
</table>


コード

Enshu204.java
public class Enshu204 { public static void main(String[] args) { Cart cart = new Cart(); cart.add(new Meat("牛肉", 395, 400)); cart.add(new Vegetable("トマト", 69, 4)); Scanner sc = new Scanner(System.in); String lst = keyin(sc, "list ? ", new String[] {"n", "d"}); // Name, Detail String fmt = keyin(sc, "format ? ", new String[] {"c", "h"}); // Csv, Html sc.close(); Factory factory = new CreateFactory(lst, fmt).getFactory(); System.out.println(cart.getList(factory.getList())); } private static String keyin(Scanner sc, String prompt, String[] param) { while(true) { System.out.print(prompt); String input = sc.nextLine(); for (String p : param) { if (p.equals(input)) return input; } } } }
Factory.java
public abstract class Factory { protected List list; public Factory() {} public List getList() { return list; } }






演習問題2-4 (Abstract Factory)