码迷,mamicode.com
首页 > 编程语言 > 详细

Java编程思想:构建复杂模型

时间:2019-03-18 11:55:56      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:import   gate   str   \n   rod   现实生活   add   tin   stringbu   

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会更好一点。
    
    但是这种编码方式的的确确优雅很多。
 */

 

Java编程思想:构建复杂模型

标签:import   gate   str   \n   rod   现实生活   add   tin   stringbu   

原文地址:https://www.cnblogs.com/junjie2019/p/10551023.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!