Beginning JO(2 Collection)
數組可以裝基本類型或者引用,collections只能裝引用。
通常有兩種方法可以擴展collection 來滿足一些需要:繼承某種集合類型和封裝某種集合類型。第一種的優點是初始化的時候在內存中只產生一個對象,這是繼承特性決定的。后者的優點是我們可以方便控制被封裝集合的各種屬性。
Whenever possible, it’s desirable to bury implementation details inside of a class rather than exposing client code to such details。例:
法1:
public class Student {
private String name;
private String studentId;
private ArrayList<TranscriptEntry> transcript; //成績報告單
public void addTranscriptEntry(TranscriptEntry te) { // 操作transcript達到記錄成績
// Store the TranscriptEntry in our ArrayList.
transcript.add(te);
}
}
客戶端調用代碼:
Student s = new Student("1234567", "James Huddleston");
Course c = new Course("LANG 800", "Advanced Language Studies");
TranscriptEntry te = new TranscriptEntry(c, "Fall 2006", "B+");
s.addTranscriptEntry(te);
法2:
建立新對象,封裝一個ArrayList:
public class Transcript {
private ArrayList<TranscriptEntry> transcriptEntries;
public void courseCompleted(Course c, String semester, String grade) {
// Instantiate and insert a brand-new TranscriptEntry object into the
// ArrayList - details hidden away!
transcriptEntries.add(new TranscriptEntry(c, semester, grade);
}
}
public class Student {
private String name;
private String studentId;
// This used to be declared as an ArrayList.
private Transcript transcript;
// etc.
}
客戶端代碼:
s.courseCompleted(c, "Spring 2006", "A+");
第二種方法使Student處理更少的細節,不用管transcripts怎么表達,看不到TranscriptEntry的存在。客戶端代碼更簡單。
通常有兩種方法可以擴展collection 來滿足一些需要:繼承某種集合類型和封裝某種集合類型。第一種的優點是初始化的時候在內存中只產生一個對象,這是繼承特性決定的。后者的優點是我們可以方便控制被封裝集合的各種屬性。
Whenever possible, it’s desirable to bury implementation details inside of a class rather than exposing client code to such details。例:
法1:
public class Student {
private String name;
private String studentId;
private ArrayList<TranscriptEntry> transcript; //成績報告單
public void addTranscriptEntry(TranscriptEntry te) { // 操作transcript達到記錄成績
// Store the TranscriptEntry in our ArrayList.
transcript.add(te);
}
}
客戶端調用代碼:
Student s = new Student("1234567", "James Huddleston");
Course c = new Course("LANG 800", "Advanced Language Studies");
TranscriptEntry te = new TranscriptEntry(c, "Fall 2006", "B+");
s.addTranscriptEntry(te);
法2:
建立新對象,封裝一個ArrayList:
public class Transcript {
private ArrayList<TranscriptEntry> transcriptEntries;
public void courseCompleted(Course c, String semester, String grade) {
// Instantiate and insert a brand-new TranscriptEntry object into the
// ArrayList - details hidden away!
transcriptEntries.add(new TranscriptEntry(c, semester, grade);
}
}
public class Student {
private String name;
private String studentId;
// This used to be declared as an ArrayList.
private Transcript transcript;
// etc.
}
客戶端代碼:
s.courseCompleted(c, "Spring 2006", "A+");
第二種方法使Student處理更少的細節,不用管transcripts怎么表達,看不到TranscriptEntry的存在。客戶端代碼更簡單。
posted on 2009-12-10 11:38 yuxh 閱讀(175) 評論(0) 編輯 收藏 所屬分類: jdk 、OO設計