假设有一个宠物商店,在这个商店里会出售各种宠物供用户选择,实现宠物商品的上架、下架、关键字模糊查询的功能。
1、创建宠物接口:IPet
public interface IPet { //定义宠物标准
public String getName();//获得宠物名称
public String getColor(); //获得宠物颜色
}
2、宠物商店与宠物的接口标准有关,并不用关心宠物的具体子类,所以此时可以直接创建PetShop类。
public class PetShop { //宠物商店
//利用链表在一个宠物商店中保存有多个宠物的信息
private ILink<IPet> allPets=new Link<IPet>();
/**
* 宠物信息上架
* @param pet要上架的宠物
*/
public void add(IPet pet) { //追加宠物,商品上架
this.allPets .add(pet); //集合中保存对象
}
/**
* 宠物信息下架(删除),链表删除操作需要equals()方法支持
* @param pet 要删除的宠物信息
*/
public void delete(IPet pet) {
this.allPets.remove(pet); //删除数据
}
/**
* 根据关键字模糊查询宠物信息,由于返回多个宠物信息,所以通过链表保存返回结果
* @param keyword模糊查询关键字
* @return 数据查询结果,如果没有结果则链表长度为0(size()==0)
*/
public ILink<IPet> search(String keyword){
ILink<IPet> searchResult=new Link<IPet>(); //保存查询结果
Object [] result=this.allPets .toArray(); //获取全部数据
if(result!=null) { //存在有宠物信息
for(Object obj:result) {
IPet pet=(IPet)obj; //向下转型以调用接口方法
if(pet.getName().contains(keyword)||pet.getColor().contains(keyword)) {
searchResult.add(pet); //保存查询结果
}
}
}
return searchResult;
}
}
3、依据IPet宠物标准定义宠物猫和狗,但是需要注意的是,为保证链表中的contains()、remove方法可以正常使用,需要覆写equals()方法。
宠物猫
public class Cat implements IPet {
private String name;
private String color;
public Cat(String name, String color) {
this.name = name;
this.color = color;
}
@Override
public String getName() {
return this.name;
}
@Override
public String getColor() {
return this.color;
}
@Override
public boolean equals(Object obj) {
if(obj==null) {
return false;
}
if(!(obj instanceof Cat)) {
return false;
}
if(this==obj) {
return true;
}
Cat cat=(Cat)obj;
return this.name .equals(cat.name)&&this.color.equals(cat.color);
}
@Override
public String toString() {
return "宠物猫 [名字=" + name + ", 颜色=" + color + "]";
}
}
宠物狗
public class Dog implements IPet {
private String name;
private String color;
public Dog(String name, String color) {
this.name = name;
this.color = color;
}
@Override
public String getName() {
return this.name;
}
@Override
public String getColor() {
return this.color;
}
@Override
public boolean equals(Object obj) {
if(obj==null) {
return false;
}
if(!(obj instanceof Dog)) {
return false;
}
if(this==obj) {
return true;
}
Dog dog=(Dog)obj;
return this.name .equals(dog.name)&&this.color.equals(dog.color);
}
@Override
public String toString() {
return "宠物狗 [名字=" + name + ", 颜色=" + color + "]";
}
}
4、编写主类进行代码测试
public class PetDemo289 {
public static void main(String[] args) {
PetShop shop=new PetShop(); //定义宠物商店
shop.add(new Dog("大黄狗","黄色")); //宠物上架
shop.add(new Dog("大黑狗","黑色")); //宠物上架
shop.add(new Cat("大花猫","花色")); //宠物上架
shop.add(new Cat("大灰猫","灰色")); //宠物上架
shop.delete(new Cat("大灰猫","灰色")); //宠物下架
Object result[] =shop.search("黄").toArray(); //数据搜索
for(Object obj:result) { //循环输出检索结果
System.out.println(obj);
}
}
}
执行结果
宠物狗 [名字=大黄狗, 颜色=黄色]