阿里云【名师课堂】Java面向对象开发106:【第05个代码模型】综合案例:宠物商店

    技术2024-01-25  115

    阿里云【名师课堂】Java面向对象开发106:【第05个代码模型】综合案例:宠物商店

    106:【第05个代码模型】综合案例:宠物商店0、编写Link类1、建立宠物标准(接口)2、定义宠物商店类3、定义宠物狗3、定义宠物猫4、编写测试程序总结

    106:【第05个代码模型】综合案例:宠物商店

    需求:

    建立一家宠物商店,店里可以进行宠物的上架、下架、关键字查询。只要求描述出程序的关系。宠物的属性:名字、年龄、毛色。

    分析:

    一家宠物商店会有多种宠物,按照设计表关系来说属于一对多关系映射。 宠物商店是一,宠物是多,那么问题来了,宠物也分很多种,怎么办?宠物应该有自己的标准(猫、狗、鱼等),不符合标准的不是宠物(盆栽、奶茶等)。因此宠物应该是一个接口,猫、狗、鱼等是具体实现、是子类。既然一家宠物商店需要描述多种宠物,而数量又不固定,要使用到链表类,通过链表存放多个信息。 所谓下架操作,就是链表中的删除,而删除操作需要equals()的支持。

    0、编写Link类

    Link类还是第105节讲解的简单Link类。详情参见:阿里云【名师课堂】Java面向对象开发97 ~ 105:链表。

    1、建立宠物标准(接口)

    接口只关心如何取得数据。

    interface IPet { // 定义宠物标准 public String getName() ; public int getAge() ; public String getColor() ; }

    2、定义宠物商店类

    对于宠物商店,只关注宠物的标准,而不关心具体是哪种宠物

    class Shop { private Link pets = new Link() ; // 开辟一个链表,保存多个宠物 public void add(IPet pet) { // 不关心是哪个宠物(子类),只关心“宠物”这个概念 this.pets.add(pet) ; // 上架就是向链表中保存数据 } public void delete(IPet pet) { this.pets.remove(pet) ; // 下架就是从链表中删除数据 } public Link getPets(IPet pet) { // 取得全部宠物 return this.pets ; // 上架就是向链表中保存数据 } public Link search(String keyWord) { // 关键字查找 Link results = new Link() ; // 查询到的结果一定是多个宠物,所以返回值是Link类 Object [] data = this.pets.toArray() ; for (int x = 0 ; x < data.length ; x++) { IPet pet = (IPet)data[x] ; // 只有转型成Pet类才可以调用接口中的三个属性 if (pet.getName().contains(keyWord) || pet.getColor().contains(keyWord)) { results.add(pet) ; } } return results ; } }

    3、定义宠物狗

    class DogImpl implements IPet { private String name ; private int age ; private String color ; public DogImpl(String name, int age, String color) { // 构造 this.name = name ; this.age = age ; this.color = color ; } public String getName() { // 接口方法覆写 return this.name ; } public int getAge() { // 接口方法覆写 return this.age ; } public String getColor() { // 接口方法覆写 return this.color ; } public boolean equals(Object obj) { // 覆写equals类 if (obj == null) { return false ; } if (this == obj) { return true ; } if (!(obj instanceof DogImpl)) { return false ; } DogImpl dog = (DogImpl)obj ; return this.name.equals(dog.name) && this.age == dog.age && this.color.equals(dog.color) ; } public String toString() { return "【狗】名字:" + this.name + ",年龄:" + this.age + ",毛色:" + this.color ; } }

    3、定义宠物猫

    class CatImpl implements IPet { private String name ; private int age ; private String color ; public CatImpl(String name, int age, String color) { // 构造 this.name = name ; this.age = age ; this.color = color ; } public String getName() { // 接口方法覆写 return this.name ; } public int getAge() { // 接口方法覆写 return this.age ; } public String getColor() { // 接口方法覆写 return this.color ; } public boolean equals(Object obj) { // 覆写equals类 if (obj == null) { return false ; } if (this == obj) { return true ; } if (!(obj instanceof CatImpl)) { return false ; } CatImpl cat = (CatImpl)obj ; return this.name.equals(cat.name) && this.age == cat.age && this.color.equals(cat.color) ; } public String toString() { return "【猫】名字:" + this.name + ",年龄:" + this.age + ",毛色:" + this.color ; } }

    4、编写测试程序

    public class PetShop { public static void main(String args[]) throws Exception { Shop petshop = new Shop() ; petshop.add(new DogImpl("卡斯罗", 2, "黑色")) ; petshop.add(new DogImpl("金毛", 4, "黄色")) ; petshop.add(new DogImpl("阿拉斯加", 3, "黑白")) ; petshop.add(new DogImpl("柴犬", 3, "黄白")) ; petshop.add(new CatImpl("暹罗猫", 1, "小黑脸")) ; petshop.add(new CatImpl("斯芬克斯猫", 1, "无毛")) ; petshop.add(new CatImpl("加菲猫", 1, "黄色")) ; Link all = petshop.search("黑") ; Object[] result = all.toArray() ; for (int i = 0 ; i < result.length ; i++) { System.out.println(result[i]) ; } System.out.println("==========================") ; petshop.delete(new DogImpl("卡斯罗", 2, "黑色")) ; Link allA = petshop.search("黑") ; Object[] resultA = allA.toArray() ; for (int i = 0 ; i < resultA.length ; i++) { System.out.println(resultA[i]) ; } } }

    完成代码:https://github.com/colderThyKiss/LinkedList.git中的PetShop.java。

    总结

    实际上这种形式的代码在生活中处处可见:

    公园里有多种绿植;动物园有多种动物;衣柜中有多种衣服;

    类比于这个宠物商店的示例代码,记住:以后在进行代码开发的过程中一切都以接口设计为主。

    Processed: 0.010, SQL: 9