1.宠物商店
面向对象的程序设计可以实现生活概念的程序抽象化,应用面向对象的程序设计解决一个实际问题。现在假设有一个宠物商店,在这个商店里会出售各种宠物共用户选择,现在要求通过程序逻辑描述实现宠物商品的上架,下架,关键字模糊查询的功能。
完整程序如下: 2.
package cn.kuiba.util;
interface ILink<E> { //设置泛型避免安全隐患
public void add(E e) ; //增加数据
public int size() ; //获取数据的个数
public boolean isEmpty() ; //判断是否空集合
public Object[] toArray() ; //将集合元素以数组的形式返回
public E get(int index) ; //根据索引获取数据
public void set(int index,E data) ; //修改索引数据
public boolean contains(E data) ; //判断数据是否存在
public void remove(E data) ; //数据删除
public void clean() ; //清空集合
}
class LinkImpl<E> implements ILink<E> {
private class Node { //保存节点的数据关系
private E data ; //保存数据
private Node next ; //保存下一个引用
public Node(E data) { //有数据的情况下才有意义
this.data = data ;
}
//第一次调用:this = LinkImpl.root ;
//第二次调用:this = LinkImpl.root.next ;
//第三次调用:this = LinkImpl.root.next.next ;
public void addNode(Node newNode){ //保存新的Node数据
if (this.next == null) { //当前节点的下一个节点为null
this.next = newNode; //保存当前节点
}else {
this.next.addNode(newNode);
}
}
//第一次调用:this = LinkImpl.root
//第二次调用:this = LinkImpl.root.next
//第三次调用 this = LinkImpl.root.next.next
public void toArrayNode() {
LinkImpl.this.returnData [LinkImpl.this.foot ++] = this.data ;
if (this.next != null) { //还有下一个数据
this.next.toArrayNode() ;
}
}
public E getNode(int index) {
if (LinkImpl.this.foot ++ == index) { //索引相同
return this.data ; //返回当前数据
}else {
return this.next.getNode(index) ;
}
}
public void setNode(int index,E data) {
if (LinkImpl.this.foot ++ == index) { //索引相同
this.data = data ; //修改数据
}else {
this.next.setNode(index,data) ;
}
}
public boolean containsNode(E data) {
if (data.equals(this.data)) { //对象比较
return true ;
}else {
if (this.next == null) { //没有后续节点
return false ; //找不到
}else {
return this.next.containsNode(data) ; //向后继续判断
}
}
}
public void removeNode (Node previous,E data) {
if (this.data.equals(data)) {
previous.next = this.next ; //空出当前节点
}else {
if (this.next != null) { //有后续节点
this.next.removeNode(this, data) ; //向后继续删除
}
}
}
}
//------------以下为Link类中定义的成员-----------------
private Node root ; //保存根元素
private int count ; //保存数据的个数
private int foot ; //描述的是操作数组的脚标
private Object[] returnData ; //返回的数据保存
//------------以下为Link类中定义的方法-----------------
public void add(E e){
if(e == null