Tôi tin rằng có hai cách sử dụng có liên quan là kinh điển: biểu mẫu và thể hiện.
A hình thức kinh điển có nghĩa là giá trị của một loại tài nguyên cụ thể có thể được mô tả hoặc đại diện theo nhiều cách, và một trong những cách được chọn làm biểu mẫu chuẩn được ưu tiên. (Hình thức đó là đã được phong thánh hóa, như sách đã biến nó thành kinh thánh, và các hình thức khác thì không.) Ví dụ kinh điển về dạng kinh điển là đường dẫn trong hệ thống tệp phân cấp, trong đó một tệp có thể được tham chiếu trong một số theo cách:
myFile.txt # in current working dir
../conf/myFile.txt # relative to the CWD
/apps/tomcat/conf/myFile.txt # absolute path using symbolic links
/u1/local/apps/tomcat-5.5.1/conf/myFile.txt # absolute path with no symlinks
Định nghĩa cổ điển của biểu thức kinh điển của tệp đó sẽ là đường dẫn cuối cùng. Với các đường dẫn cục bộ hoặc tương đối, bạn không thể xác định toàn bộ tài nguyên mà không có thông tin theo ngữ cảnh. Với đường dẫn tuyệt đối, bạn có thể xác định tài nguyên, nhưng không thể biết liệu hai đường dẫn có tham chiếu đến cùng một thực thể hay không. Với hai hoặc nhiều đường dẫn được chuyển đổi thành dạng chuẩn, bạn có thể thực hiện tất cả những điều trên, cộng với xác định xem hai tài nguyên có giống nhau hay không, nếu điều đó quan trọng đối với ứng dụng của bạn (giải quyết vấn đề bí danh).
Lưu ý rằng dạng thức chuẩn của tài nguyên không phải là chất lượng của chính biểu mẫu cụ thể đó; có thể có nhiều hình thức kinh điển có thể cho một loại nhất định như đường dẫn tệp (ví dụ, trước tiên về mặt ngôn ngữ của tất cả các đường dẫn tuyệt đối có thể). Một biểu mẫu chỉ được chọn làm biểu mẫu chuẩn cho một lý do ứng dụng cụ thể hoặc có thể tùy ý để mọi người nói cùng một ngôn ngữ.
Buộc các đối tượng vào trường hợp kinh điển là ý tưởng cơ bản giống nhau, nhưng thay vì xác định một biểu diễn "tốt nhất" của tài nguyên, nó tùy ý chọn một thể hiện của một thể loại có cùng "nội dung" tham chiếu, sau đó chuyển đổi tất cả các tham chiếu đến các đối tượng tương đương để sử dụng một cá thể kinh điển.
Điều này có thể được sử dụng làm kỹ thuật tối ưu hóa cả thời gian và không gian. Nếu có nhiều trường hợp của các đối tượng tương đương trong một ứng dụng, thì bằng cách buộc tất cả chúng được giải quyết như một cá thể kinh điển duy nhất của một giá trị cụ thể, bạn có thể loại bỏ tất cả trừ một giá trị, tiết kiệm không gian và có thể là thời gian. các giá trị đó với định danh tham chiếu (==) trái ngược với đối tượng tương đương (phương pháp equals()
).
Ví dụ điển hình về tối ưu hóa hiệu suất với các phiên bản chuẩn là thu gọn các chuỗi có cùng nội dung. Gọi String.intern()
trên hai chuỗi có cùng chuỗi ký tự được đảm bảo trả về cùng một đối tượng Chuỗi chuẩn cho văn bản đó. Nếu bạn vượt qua tất cả các chuỗi của bạn thông qua bộ chỉnh sửa đó, bạn biết các chuỗi tương đương thực sự là các tham chiếu đối tượng giống nhau, tức là, các bí danh
Các loại enum trong Java 5.0+ buộc tất cả các trường hợp của một giá trị enum cụ thể để sử dụng cùng một thể hiện kinh điển trong một VM, ngay cả khi giá trị được tuần tự hóa và deserialized. Đó là lý do tại sao bạn có thể sử dụng if (day == Days.SUNDAY)
với khả năng miễn dịch trong java nếu Days
là loại enum. Làm điều này cho các lớp học của riêng bạn chắc chắn là có thể, nhưng hãy cẩn thận. Đọc Hiệu quả Java bởi Josh Bloch để biết chi tiết và lời khuyên.
kinh điển có một ý nghĩa phong phú hơn so với tiêu chuẩn hoặc thông thường IMO. – squid