Beginning JO(2 Collection)
數(shù)組可以裝基本類型或者引用,collections只能裝引用。
通常有兩種方法可以擴(kuò)展collection 來滿足一些需要:繼承某種集合類型和封裝某種集合類型。第一種的優(yōu)點(diǎn)是初始化的時候在內(nèi)存中只產(chǎn)生一個對象,這是繼承特性決定的。后者的優(yōu)點(diǎn)是我們可以方便控制被封裝集合的各種屬性。
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; //成績報(bào)告單
public void addTranscriptEntry(TranscriptEntry te) { // 操作transcript達(dá)到記錄成績
// Store the TranscriptEntry in our ArrayList.
transcript.add(te);
}
}
客戶端調(diào)用代碼:
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處理更少的細(xì)節(jié),不用管transcripts怎么表達(dá),看不到TranscriptEntry的存在。客戶端代碼更簡單。
通常有兩種方法可以擴(kuò)展collection 來滿足一些需要:繼承某種集合類型和封裝某種集合類型。第一種的優(yōu)點(diǎn)是初始化的時候在內(nèi)存中只產(chǎn)生一個對象,這是繼承特性決定的。后者的優(yōu)點(diǎn)是我們可以方便控制被封裝集合的各種屬性。
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; //成績報(bào)告單
public void addTranscriptEntry(TranscriptEntry te) { // 操作transcript達(dá)到記錄成績
// Store the TranscriptEntry in our ArrayList.
transcript.add(te);
}
}
客戶端調(diào)用代碼:
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處理更少的細(xì)節(jié),不用管transcripts怎么表達(dá),看不到TranscriptEntry的存在。客戶端代碼更簡單。
posted on 2009-12-10 11:38 yuxh 閱讀(175) 評論(0) 編輯 收藏 所屬分類: jdk 、OO設(shè)計(jì)