1.确认你的软件客户要它做的事。
2.运用基本的oo原则来增加软件的灵活性。
3.努力实现可维护、可重用的设计。
项目架构:
guitar类:
1 package com.headfirst.guitar; 2 3 public class guitar { 4 private string serialnumber, builder, model, type, backwood, topwood; 5 private double price; 6 7 public guitar(string serialnumber, double price, string builder, 8 string model, string type, string backwood, string topwood){ 9 this.serialnumber = serialnumber;10 this.price = price;11 this.builder = builder;12 this.model = model;13 this.type = type;14 this.backwood = backwood;15 this.topwood = topwood;16 }17 18 public string getserialnumber(){19 return serialnumber;20 }21 public double getprice(){22 return price;23 }24 public void setprice(float newprice){25 this.price = newprice;26 }27 public string getbuilder(){28 return builder;29 }30 public string getmodel(){31 return model;32 }33 public string gettype(){34 return type;35 }36 public string getbackwood(){37 return backwood;38 }39 public string gettopwood(){40 return topwood;41 }42 }
inventory类:
1 package com.headfirst.guitar; 2 3 import java.util.iterator; 4 import java.util.linkedlist; 5 import java.util.list; 6 7 public class inventory { 8 9 private list guitars;10 11 public inventory(){12 guitars = new linkedlist();13 }14 15 public void addguitar(string serialnumber, double price, string builder, string model, string type,16 string backwood, string topwood){17 guitar guitar = new guitar(serialnumber, price, builder, 18 model, type, backwood, topwood);19 guitars.add(guitar);20 }21 22 public guitar getguitar(string serialnumber){23 for(iterator i = guitars.iterator(); i.hasnext();){24 guitar guitar = (guitar) i.next();25 if(guitar.getserialnumber().equals(serialnumber)){26 return guitar;27 }28 }29 30 return null;31 }32 33 public guitar search(guitar searchguitar){34 for(iterator i = guitars.iterator(); i.hasnext();){35 guitar guitar = (guitar) i.next();36 string builder = searchguitar.getbuilder();37 if((builder != null) && (!builder.equals()) && 38 (!builder.equals(guitar.getbuilder())))39 continue;40 41 string model = searchguitar.getmodel();42 if((model != null) && (!model.equals()) && 43 (!model.equals(guitar.getmodel())))44 continue;45 46 string type = searchguitar.gettype();47 if((type != null) && (!type.equals()) && 48 (!type.equals(guitar.gettype())))49 continue;50 51 string backwood = searchguitar.getbackwood();52 if((backwood != null) && (!backwood.equals()) && 53 (!backwood.equals(guitar.getbackwood())))54 continue;55 56 string topwood = searchguitar.gettopwood();57 if((topwood != null) && (!topwood.equals()) && 58 (!topwood.equals(guitar.gettopwood())))59 continue;60 return guitar;61 }62 63 return null;64 }65 }
搜寻测试代码:
1 package com.headfirst.guitar; 2 3 public class findguitartester { 4 public static void main(string[] args){ 5 inventory inventory = new inventory(); 6 initializeinventory(inventory); 7 8 guitar whaterinlikes = new guitar(, 0, fender, stratocastor, electric, alder, alder); 9 10 guitar guitar = inventory.search(whaterinlikes);11 if(guitar != null){12 system.out.println(erin, you might like this + 13 guitar.getbuilder() + + guitar.getmodel() + 14 + guitar.gettype() + guitar:\n + 15 guitar.getbackwood() + back and sides,\n +16 guitar.gettopwood() + top.\nyou can have it for only $ + 17 guitar.getprice() + !);18 }else{19 system.out.println(sorry, erin, we have nothing for you.);20 }21 }22 23 private static void initializeinventory(inventory inventory){24 inventory.addguitar(v95693, 1499.95, fender, stratocastor, electric, alder, alder);25 }26 }
运行结果:
为什么,明明有,为什么说没有?
检查了代码,可能搜寻中“fender”的f是小写,而我们有的“fender”是大写。
好,我们对吉他搜索工具进行第一个改善,去除掉所有string比较:
项目修改架构:
builder.java:
1 package com.headfirst.guitar; 2 3 public enum builder { 4 5 fender, martin, gibson, collings, olson, ryan, prs, any; 6 7 public string tostring(){ 8 switch(this){ 9 case fender:10 return fender;11 case martin:12 return martin;13 case gibson:14 return gibson;15 case collings:16 return collings;17 case olson:18 return olson;19 case ryan:20 return ryan;21 case prs:22 return prs;23 case any:24 return any;25 default: 26 return ;27 }28 }29 }
type.java:
1 package com.headfirst.guitar; 2 3 public enum type { 4 acoustic, electric; 5 6 public string tostring(){ 7 switch(this){ 8 case acoustic: 9 return acoustic;10 case electric: 11 return electric;12 default:13 return ;14 }15 }16 }
wood.java:
1 package com.headfirst.guitar; 2 3 public enum wood { 4 indian_rosewood, brazilian_rosewood, alder; 5 6 public string tostring(){ 7 switch(this){ 8 case indian_rosewood: 9 return indian rosewood;10 case brazilian_rosewood:11 return brazilian rosewood;12 case alder:13 return alder;14 default:15 return ;16 }17 }18 }
修改findguitartester.java第8行代码:
1 guitar whaterinlikes = new guitar(, 0, builder.fender, stratocastor, type.electric, wood.alder, wood.alder);
修改inventory.java中search()方法:
1 public guitar search(guitar searchguitar){ 2 for(iterator i = guitars.iterator(); i.hasnext();){ 3 guitar guitar = (guitar) i.next(); 4 5 if(searchguitar.getbuilder() != guitar.getbuilder()) 6 continue; 7 8 string model = searchguitar.getmodel().tolowercase(); 9 if((model != null) && (!model.equals()) && 10 (!model.equals(guitar.getmodel().tolowercase())))11 continue;12 13 if(searchguitar.gettype() != guitar.gettype())14 continue;15 16 if(searchguitar.getbackwood() != guitar.getbackwood())17 continue;18 19 if(searchguitar.gettopwood() != guitar.gettopwood())20 continue;21 22 return guitar;23 }24 25 return null;26 }
现在我们担心的是model属性,我们没有把它做成enum,并且model没有办法限制,所以做不出enum。
除此之外:我们修改的地方还有:
各种变量的类型,用enum的全部替换掉。
以上就是java中应用程序的详细介绍的详细内容。
