import sun.nio.cs.Surrogate; import java.util.ArrayList; import java.util.Random; public class Test { public static void main(String[] args) { Store.test(); } } /* 15.6 构建复杂模型 需求: 这是一个很有趣的需求,它描述的是一个零售店,零售店里包括走廊、货架 和商品,零售店里有很多条走廊,走廊里又有很多个货架、货架中又有很多 的商品。 我最直观的想法,就是创建出许多装商品的ArrayList,这些装商品的ArrayList 被命名为货架,又将许多的货架ArrayList装到一个个走廊的ArrayList,最后在 把一个个走廊ArrayList放到一个叫作零食店的ArrayList,这样可以做,但是不是 很优雅。 */ interface Generator<T>{ T next(); } class Product { private final int id; private String desc; private double price; public Product(int id, String desc, double price) { this.id = id; this.desc = desc; this.price = price; } public String toString() { return id + ": " + desc + ". price: $" + price; } public void priceChange(double change) { price += change; } public static Generator<Product> generator = new Generator<Product>() { private Random random = new Random(47); @Override public Product next() { return new Product(random.nextInt(1000), "Test", Math.round(random.nextDouble()*1000.0)+0.99); } }; } class Shelf extends ArrayList<Product> { public Shelf(int nProducts) { for (int i = 0; i < nProducts; i++) { this.add(Product.generator.next()); } } } class Aisle extends ArrayList<Shelf> { public Aisle(int nShelves, int nProducts) { for (int i = 0; i < nShelves; i++) { add(new Shelf(nProducts)); } } } class CheckoutStand{ } class Office{ } class Store extends ArrayList<Aisle> { private ArrayList<CheckoutStand> checkoutStands = new ArrayList<>(); private ArrayList<Office> Office = new ArrayList<>(); public Store(int nAisles, int nShelves, int nProducts) { for (int i = 0; i < nAisles; i++) { add(new Aisle(nShelves, nProducts)); } } public String toString() { StringBuilder sb = new StringBuilder(); for (Aisle a : this) { for (Shelf s : a) { for (Product p : s) { sb.append(p).append("\n"); } } } return sb.toString(); } static void test() { System.out.println(new Store(14,5,10)); } } /* 我觉得这个设计这样用挺浪费的,这个它纯粹为了案例演示,让Product类 自动生成自己的对象了,现实生活中肯定不会这么用着。 现实中,一个商品放在哪个走廊哪个位置应该都是有一张表的,我们根据表 中的数据先实例化出一个商品类来,然后再根据表中的数据找到这个商品放 置的位置,这个过程中,可能用map会更好一点。 但是这种编码方式的的确确优雅很多。 */
原文地址:https://www.cnblogs.com/junjie2019/p/10551023.html
时间: 2024-10-05 01:26:22