Java编程思想:构建复杂模型
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>() {
);
@Override
public Product next() {
),
"Test",
Math.round(random.nextDouble()*1000.0)+0.99);
}
};
}
class Shelf extends ArrayList<Product> {
public Shelf(int nProducts) {
; i < nProducts; i++) {
this.add(Product.generator.next());
}
}
}
class Aisle extends ArrayList<Shelf> {
public Aisle(int nShelves, int nProducts) {
; 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) {
; 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.,,));
}
}
/*
我觉得这个设计这样用挺浪费的,这个它纯粹为了案例演示,让Product类
自动生成自己的对象了,现实生活中肯定不会这么用着。
现实中,一个商品放在哪个走廊哪个位置应该都是有一张表的,我们根据表
中的数据先实例化出一个商品类来,然后再根据表中的数据找到这个商品放
置的位置,这个过程中,可能用map会更好一点。
但是这种编码方式的的确确优雅很多。
*/
Java编程思想:构建复杂模型的更多相关文章
- Java编程思想(11~17)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...
- Java编程思想(后)
Java编程思想(后) 持有对象 如果一个程序只包含固定数量的且其生命期都是已知的对象,那么这是一个非常简单的程序. Java中的库基本类型: List, Set, Queue和Map --- 称为集 ...
- JAVA编程思想——分析阅读
需要源码.JDK1.6 .编码风格参考阿里java规约 7/12开始 有点意识到自己喜欢理论大而泛的模糊知识的学习,而不喜欢实践和细节的打磨,是因为粗心浮躁导致的么? cron表达式使用 设计能力.领 ...
- Java编程思想 笔记
date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...
- 《Java编程思想》读书笔记(二)
三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第一章到第十章的内容,这一次记录的是第 ...
- 《Java编程思想》读书笔记(五)
前言:本文是<Java编程思想>读书笔记系列的最后一章,本章的内容很多,需要细读慢慢去理解,文中的示例最好在自己电脑上多运行几次,相关示例完整代码放在码云上了,码云地址:https://g ...
- 《Java编程思想》学习笔记(二)——类加载及执行顺序
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...
- Java编程思想 (1~10)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第一章 对象导论 1.万物皆对象2.程序就是对象的集合3.每个对象都是由其它对象所构成 ...
- MyEclipse导入ant项目——Java编程思想
北门煎饼东门串儿: <JAVA编程思想(Think in Java)>一书中提供了大量源代码,可是项目是用ant构建的.对于用惯了eclipse,netbeans等IDE的同学们可能有些手 ...
- Java编程思想总结笔记Chapter 2
本章介绍Java程序的基本组成部分,体会到Java中几乎一切都是对象. 第二章 一切都是对象 目录: 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.3 永远不需要销毁对象 2.4 创建 ...
随机推荐
- 【Linux】Linux中常用操作命令(转)
Linux简介及Ubuntu安装 Linux,免费开源,多用户多任务系统.基于Linux有多个版本的衍生.RedHat.Ubuntu.Debian 安装VMware或VirtualBox虚拟机.具体安 ...
- SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication
原文:SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication 没有截图: 创建可更新订阅,正常创建了发布,在订阅端创建订阅,最后一步提示完成,却出现了警告: ...
- oracle data guard备库备份恢复
客户有套data guard环境,主库在阿里云上,备库在本地机房,现在想定期做备份,但是因为一些原因,备份阿里云上的主库实现会有些问题,所以只能备份本地的备库.目前需求就是测试备库的备份文件是否可以进 ...
- SGI地址模式: O32, N32和N64
背景 MIPS R10000芯片支持MIPS ABI.遵循这一标准的程序能够运行在遵循这一标准的任何处理器/系统上.目前,主要的支持者有SGI,西门子,Nixdof, Tandem, Pyramid, ...
- js判断图片是否存在
var imageData = Array(); for(var i = 0; i < imageTemp.length; i++){ ajaxSizeRequest = $.ajax({ ty ...
- CSS3 GENERATOR可以同时为一个元素完成border-radius、box-shadow、gradient和opacity多项属性的设置
CSS3 GENERATOR可以同时为一个元素完成border-radius.box-shadow.gradient和opacity多项属性的设置 CSS3 GENERATOR 彩蛋爆料直击现场 CS ...
- qt中采用宽带speex进行网络语音通话实验程序
qt中采用宽带speex进行网络语音通话实验程序 本文博客链接:http://blog.csdn.NET/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN8 开发环境:Qt5 3.1. ...
- hdu4767_Bell_矩阵快速幂+中国剩余定理
2013长春赛区网络赛的1009题 比赛的时候这道题英勇的挂掉了,原因是写错了一个系数,有时候粗心比脑残更可怕 本题是关于Bell数,关于Bell数的详情请见维基:http://en.wikipedi ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发
进行本文之前需要在数据库用户表里面增加一条用户数据,直接手动添加即可,未安全考虑密码一定要使用Md5加密后的,这里提供666666的Md5密文为(c831b04de153469d),本文完成登录模块的 ...
- Flume NG高可用集群搭建详解
.Flume NG简述 Flume NG是一个分布式,高可用,可靠的系统,它能将不同的海量数据收集,移动并存储到一个数据存储系统中.轻量,配置简单,适用于各种日志收集,并支持 Failover和负载均 ...