伟大软件的简易三步骤:

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的全部替换掉。

转载于:https://www.cnblogs.com/lanshanxiao/p/7183526.html

第一章.良好应用程序基石(2)相关推荐

  1. 大道至简第一章 读后感

    大道至简第一章--编程的精义 //愚公移山 public class Yugongyishan { public static void main(String[] args) { do {If(愚公 ...

  2. 数字图像处理:第一章 概述

    第一章 概述 数字图象处理是一门关于如何用计算机对图象进行处理的学科,本课程主要讲解基本原理和方法,针对计算机系的学生,强调编程实践和建立图象处理应用系统的方法.推荐的教材与图象编程参考书包括: R. ...

  3. 深入理解计算机系统(原书第三版)系列 第一章 计算机系统漫游

    大学学习 计算机操作系统,当时太年轻,没有重视起来,今天 重拾书本,来看看这本传说中的 豆瓣9.9的神书 ,夯实基础,基础是石,敲出希望之火. 第一章 计算机系统漫游

  4. 第二篇第一章概述及第二章生产和储存物品的火灾危险性分类 重点在于表格...

    2019/1/4 [录播]2018一消精华班-实务-一级消防工程师-环球网校 http://v.edu24ol.com/?type=lesson&id=178923&gid=16157 ...

  5. RedHat6.2服务器配置方案大全--第一章:DNS

    RedHat6.2服务器配置方案大全--第一章:DNS 本文出自:http://lslnet.com/linux/ 作者:汤海京 (2001-09-28 07:00:00) (2000年11月23日 ...

  6. 天辰的救赎(JS)第一章(救赎之地)

    阅读须知 这是一篇小说风格的关于JS的文章,网上已经有大量的优秀技术文章和书籍,写系列的主要目的只是想尝试用不同的方式来分享一些关于JS的知识,或者可以说只是单纯地为了好玩,文笔不怎么好,希望大家多多 ...

  7. 《音速小子索尼克4:第一章》基本操作及BOSS攻略

    音速小子索尼克4:第一章(Sonic 4 Episode I)是有著名的游戏公司世嘉(SEGA)推出的一款动作冒险类型的闯关游戏,在这款游戏中玩家需要收集奔跑过程中出现的金色光环,当玩家收集到100个 ...

  8. 计算机组成原理第一章课件,计算机组成原理ppt 第一章课件.ppt

    计算机组成原理ppt 第一章课件 计算机组成原理;教材白中英,计算机组成原理·网络版,科学出版社,2002参考书石磊,计算机组成原理·第2版, 清华大学出版社,2006钱晓捷,微型计算机原理及应用, ...

  9. 王道考研 计算机网络笔记 第一章:概述计算机网络体系结构

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 后续章节将陆续更新- 目录 一.概念.功能.组成.分类 1. 计算机网络的概念 2. 计算机网络功能 3. 计算 ...

最新文章

  1. 防止非法链接(referer)
  2. java追加文本到文件末尾
  3. CSS+DIV-公司网站
  4. 如何选择String
  5. drupal6 笔记
  6. C++ float的内存布局
  7. 实战:分布式锁详解与代码
  8. C++调用方式 入栈顺序
  9. 谁说IT男没有审美?怀揣5000元巨款,我们这样改变生活
  10. 苹果cms V10模板 手机端模板粉红色模板带会员中心
  11. DNN Mail功能介绍 [DNN 3.2.2]
  12. 给项目添加spring的测试单元
  13. 剑指offer——面试题32:从1到n整数中1出现的次数
  14. 右键tomcat 选择 add and remove,出现的对话框里面没有我们的项目解决方法
  15. burpsuite上传截断拿shell
  16. No toolchains found in the NDK toolchains folder for ABI with prefix:XXX
  17. ubuntu 通过ssh链接ARM板 及 IMX6使用调试串口通信
  18. bootstrap 垂直居中 布局_Bootstrap 4 栅格系统垂直布局
  19. java基于springboot水果销售商城管理系统
  20. python读写文件的语句_用Python读写文件指南

热门文章

  1. install命令和cp命令的区别
  2. HTML5 LocalStorage 本地存储JSON数据
  3. ModifyStyle函数的用法
  4. 成幻Online Judge 1.00 Beta 正式发布 2007.6.22
  5. IntellIJ IDEA 导入 Java 项目后无法运行 main 方法的解决方案
  6. 【正一专栏】梅西、内马尔分开明天会更好
  7. 在线实时大数据平台Storm本地模式运行的一个小发现
  8. VC对话框最小化到托盘
  9. 类与类之间关系的表示方式
  10. Js选择器方法汇总之Salesforce常用