12.10综合案例:宠物商店

假设有一个宠物商店,在这个商店里会出售各种宠物供用户选择,实现宠物商品的上架、下架、关键字模糊查询的功能。
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);
			}
		}
}

执行结果

宠物狗 [名字=大黄狗, 颜色=黄色]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值