設計一個“寵物商店”,在寵物商店中可以有多種寵物,試表示出此種關系,並要求可以根據寵物的關鍵字查找相應的寵物信息。
//================================================= // File Name : factory //------------------------------------------------------------------------------ // Author : Common // 接口名:Pet // 屬性: // 方法: interface Pet{ public String getName(); public String getColor(); public int getAge(); } //類名:Cat //屬性: //方法: class Cat implements Pet{ private String Name; private String Color; private int Age; public Cat(String name, String color, int age) { //構造方法 this.setName(name); this.setColor(color); this.setAge(age); } public String getName() { return Name; } public void setName(String name) { Name = name; } public String getColor() { return Color; } public void setColor(String color) { Color = color; } public int getAge() { return Age; } public void setAge(int age) { Age = age; } } //類名:Dog //屬性: //方法: class Dog implements Pet{ private String Name; private String Color; private int Age; public Dog(String name, String color, int age) { //構造方法 this.setName(name); this.setColor(color); this.setAge(age); } public String getName() { return Name; } public void setName(String name) { Name = name; } public String getColor() { return Color; } public void setColor(String color) { Color = color; } public int getAge() { return Age; } public void setAge(int age) { Age = age; } } //類名:PetShop //屬性: //方法: class PetShop{ private Pet[] pets; //定義一個Pet形數組,此數字的大小由傳入的len決定 private int foot; //定義數組的當前元素下標 public PetShop(int len){ //數組的大小由len決定,構造方法 if(len>0){ //判斷傳入的長度是否大於0 this.pets = new Pet[len]; //根據傳入的大小開辟空間 }else{ this.pets = new Pet[1]; //否則只開辟長度為1的空間 } } public boolean add(Pet pet){ if(this.foot < this.pets.length){ //判斷數組是否已經滿了 this.pets[foot] = pet; //沒有存滿則繼續添加 this.foot++; //修改下標 return true; //添加成功 }else{ return false; //添加失敗,已經存滿了 } } public Pet[] search(String keyWord){ //關鍵字查找 Pet p[] = null; //存放查找的結果,此處的大小不是固定的 int count = 0; //記錄下多少個寵物符合查詢結果 for (int i=0;i<this.pets.length;i++){ if(this.pets[i] != null){ if(this.pets[i].getName().indexOf(keyWord) != -1 || this.pets[i].getColor().indexOf(keyWord) != -1){ count++; //統計符合條件的寵物個數 } } } p = new Pet[count]; //根據已經確定的記錄數開辟對象數組 int f = 0; //設置增加的位置標記 for (int i=0;i<this.pets.length;i++){ if(this.pets[i] != null){ if(this.pets[i].getName().indexOf(keyWord) != -1 || this.pets[i].getColor().indexOf(keyWord) != -1){ p[f] = this.pets[i]; //將符合查詢條件的寵物信息保存 f++; } } } return p; } } //主類 //Function : 適配器設計模式 public class Pet_demo { public static void main(String[] args) { // TODO 自動生成的方法存根 PetShop ps = new PetShop(5); ps.add(new Cat("白貓","白",2)); ps.add(new Cat("黑貓","黑",4)); ps.add(new Cat("黃貓","黃",3)); ps.add(new Cat("白狗","白",2)); ps.add(new Cat("黑狗","黑",2)); ps.add(new Cat("黃狗","黃",3)); print(ps.search("黑")); } public static void print(Pet p[]){ for (int i = 0;i<p.length;i++){ if(p[i] != null){ System.out.println(p[i].getName()+p[i].getAge()+p[i].getColor()); } } } }