6.10 实例分析——宠物商店
1.设计要求
实现一个宠物商店,在宠物商店中可以有多种(由用户决定数量)宠物,试表示出此种关系,并要求可以根据宠物的关键字查找到相应的宠物信息。所需要的宠物信息自行设计。
2.程序分析
(1)本要求中提示宠物的信息可以自行设计,所以此时简单设计出3个属性:名字、颜色、年龄。
(2)宠物的类别很多,如猫、狗等都属于宠物,所以宠物应该是一个标准。
(3)在宠物商店中,只要是符合此宠物标准的就可以放进宠物商店之中。
(4)宠物商店中要保存多种宠物,则肯定应该是一个宠物的对象数组,宠物的个数由用户决定的话,则应该在创建宠物商店的时候,就分配好所能保存的宠物个数。
根据上面的分析,可以得出如图6-21所示的图形。
从图6-21中可以清楚地发现,宠物商店不管具体的宠物是哪一个,只要是宠物就可以放进去,所以此宠物的标准应该使用接口进行定义,每个具体的宠物都实现此接口,宠物商店与接口有关,可以得出如图6-22所示的类图关系。
图6-21 分析图
图6-22 类图
从图6-22中可知,制订出了宠物的标准之后,程序可以任意扩充具体的宠物,因为宠物商店只与宠物标准有关。
3.程序设计
代码:宠物接口—Pet.java
之后根据此接口定义出具体的子类。
代码:宠物猫—Cat.java
代码:宠物狗—Dog.java
此处只定义出了两种宠物,如果有更多的宠物,则只要实现Pet接口即可,下面开始定义宠物商店的操作类,在宠物商店中应该包含一个宠物接口的对象数组。
代码:宠物商店—PetShop.java
上面的查询代码可能会比较复杂一些,下面简单为读者介绍以上代码的思路。
(1)在此方法设计的时候秉着一个原则,即所有的内容交给被调用处输出,类中不要直接输出内容,所以本方法必须有一个返回值,因为查找出来的结果肯定是多个,所以返回值的类型定义为Pet[],表示返回一组查询到的宠物,所以方法名称设计如下:
(2)一个宠物商店中会有多个宠物,但是符合查询条件的宠物只有几个,所以要想返回一个对象数组,则必须要确定好此数组需要开辟的空间的大小才行,操作代码如下:
在上面的代码中,查询使用的是String类中的indexOf()方法,如果此方法的返回值不为-1,则表示已经找到了查询内容,因为在接口的定义中已经明确的定义了得到信息的操作,所以直接使用接口对象即可。
(3)为返回的对象数组开辟空间之后,下面就要把每一个符合条件的对象向数组中依次加入,所以还需要再进行一次循环,操作代码如下:
这样经过上面的3步之后,就可以把全部符合查询条件的内容查找出来,并放在返回的对象数组之中。
程序编写完成之后,下面对以上程序进行测试。
4.程序测试
代码:测试宠物商店—PetShopDemo.java
程序执行结果:
在上面的程序中,宠物商店里只能存放五种宠物,所以再加入第6种宠物的时候就无法再增加了,调用查询方法后返回的是一组宠物信息,所以直接定义一个print()方法进行内容的输出。