zoukankan      html  css  js  c++  java
  • 第一章.良好应用程序基石(2)

    伟大软件的简易三步骤:

    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:
     " + 
    15             guitar.getBackWood() + " back and sides,
     " +
    16             guitar.getTopWood() + " top.
    You 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的全部替换掉。

  • 相关阅读:
    Linq增删查改
    ObjectiveC 的一些记录
    MAX+VC版的RenderMonkey
    PHP校验身份证是否合法
    将小程序scene中的字符串转为对象
    使用JavaScript与Servlet实现客户端与服务器端验证
    分析jdbc程序的编写步骤和原理
    解析Tomcat生成源代码分析javaBean与对象的生成关系
    《Python基础教程》要点(十):充电时刻:导入模块
    《Python基础教程》要点(七):更加抽象:类
  • 原文地址:https://www.cnblogs.com/lanshanxiao/p/7183526.html
Copyright © 2011-2022 走看看