CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này giải thích Java singleton sample bằng hình ảnh và văn bản, được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.
ps: Trước hết chúng ta cần biết singleton là gì, tại sao nên sử dụng singleton, lợi ích của việc sử dụng nó là gì và các vấn đề khác.
1: Mẫu singleton trong Java là một mẫu thiết kế phổ biến. Có một số cách để viết mẫu singleton. Ở đây chúng tôi chủ yếu giới thiệu hai loại: singleton kiểu lười biếng và singleton kiểu đói khát.
Mẫu Singleton có các đặc điểm sau:
1. Một lớp singleton chỉ có thể có một phiên bản. 2. Một lớp singleton phải tạo một thể hiện duy nhất của riêng nó. 3. Lớp singleton phải cung cấp phiên bản này cho tất cả các đối tượng khác.
Mẫu singleton đảm bảo rằng chỉ có một phiên bản của một lớp và nó tự khởi tạo và cung cấp phiên bản này cho toàn bộ hệ thống. Trong các hệ thống máy tính, nhóm luồng, bộ đệm, đối tượng nhật ký, hộp thoại, máy in và đối tượng trình điều khiển card đồ họa thường được thiết kế dưới dạng đơn lẻ. Các ứng dụng này ít nhiều đều có chức năng quản lý tài nguyên. Mỗi máy tính có thể có nhiều máy in, nhưng chỉ có một bộ đệm máy in để ngăn hai lệnh in được xuất ra máy in cùng một lúc. Mỗi máy tính có thể có một số cổng giao tiếp và hệ thống phải quản lý tập trung các cổng giao tiếp này để ngăn hai yêu cầu gọi một cổng giao tiếp cùng một lúc. Nói tóm lại, mục đích của việc chọn chế độ đơn là để tránh các trạng thái không nhất quán và tránh các chính sách dài hạn.
2: Phong cách đàn ông lười biếng.
Đầu tiên viết lớp singleton.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
công cộng
lớp học
kiểm tra đơn lẻ {
riêng tư
kiểm tra đơn lẻ() {}
riêng tư
tĩnh
singletontest đơn =
vô giá trị
;
công cộng
tĩnh
kiểm tra singleton lấy trường hợp() {
nếu như
(đơn ==
vô giá trị
) {
đơn =
mới
kiểm tra đơn lẻ();
hệ thống.out.println(
"Tạo một lần"
);
}
trở lại
đơn;
}
công cộng
vô hiệu
trình diễn(){
hệ thống.out.println(
"Tôi đang trình diễn"
);
}
}
|
Đây là mã trực tiếp, kèm theo giải thích chi tiết trong mã.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
công cộng
lớp học
singletontest2 {
công cộng
tĩnh
vô hiệu
main(chuỗi[] args) {
singletontest singleton=singletontest.getinstance();
singletontest singleton2=singletontest.getinstance();
singleton.hiển thị();
singleton2.hiển thị();
nếu như
(đơn lẻ == đơn lẻ2){
hệ thống.out.println(
"Biểu diễn chuỗi của đối tượng này:"
);
hệ thống.out.println(
"độc thân:"
+singleton.tostring());
hệ thống.out.println(
"singleton2:"
+singleton2.tostring());
}
|

Từ hình trên có thể thấy rằng ngay cả khi có thêm một số đối tượng được tạo ra thì cũng chỉ có một thể hiện đối tượng đơn lẻ ở phía dưới và cách biểu diễn chuỗi của đối tượng được tạo cũng giống nhau. Một số người thường nghi ngờ là hai. đối tượng là Nó trông như thế nào? Tôi sẽ giải thích cho bạn bên dưới. , trước khi viết về phong cách lười biếng này, tôi cần chú ý đến nó. Nó không an toàn cho luồng. Nhiều trường hợp đơn lẻ có thể xuất hiện trong một môi trường đồng thời. Có nhiều cách để giải quyết nó, chẳng hạn như khóa đồng bộ hóa, tĩnh bên trong. các lớp, v.v. Ở đây chúng ta chủ yếu nói về các lớp bên trong tĩnh, lớp nào tốt hơn. .
?
1
2
3
4
5
6
7
8
9
10
|
công cộng
lớp học
đơn lẻ3 {
riêng tư
tĩnh
lớp học
người giữ đơn {
riêng tư
tĩnh
cuối cùng
thể hiện singleton3 =
mới
đơn lẻ3();
}
riêng tư
đơn lẻ3 (){}
công cộng
tĩnh
cuối cùng
singleton3 lấy ví dụ() {
hệ thống.out.println(
"sáng tạo đơn lẻ"
);
trở lại
singletonholder.instance;
}
}
|
Gọi:
?
1
2
3
4
5
6
7
|
singleton3 singleton3=singleton3.getinstance();
singleton3 singleton4=singleton3.getinstance();
nếu như
(đơn lẻ3 == đơn lẻ4){
hệ thống.out.println(
"Biểu diễn chuỗi của đối tượng này:"
);
hệ thống.out.println(
"singleton3:"
+singleton3.tostring());
hệ thống.out.println(
"singleton4:"
+singleton4.tostring());
}
|
Biểu đồ kết quả:

Ở đây tôi cũng tạo ra hai đối tượng để minh họa. Điều kỳ diệu là việc tạo đơn lẻ này có phải là một đối tượng khác được tạo thành công không? Câu trả lời là: Mặc dù được in hai lần và có hai tên đối tượng nhưng cách biểu diễn chuỗi của đối tượng vẫn giống nhau và mọi người đều biết cách sử dụng static, tức là đối tượng singleton đã được tạo khi lớp được tải. Nó sẽ không được tạo lại sau này. Ngay cả khi phương thức getinstance() được gọi sau, lớp bên dưới vẫn là một đối tượng singleton công khai.
Tương tự, tôi viết một lớp bình thường để tạo hai đối tượng cùng lúc và in phương thức tostring() của chúng, như sau:
?
1
2
3
4
5
6
7
8
9
10
11
|
qubie qb1=
mới
qubie();
qubie qb2=
mới
qubie();
nếu như
(qb1 == qb2){
hệ thống.out.println(
"Biểu diễn chuỗi của đối tượng này:"
);
hệ thống.out.println(
"singleton3:"
+qb1.tostring());
hệ thống.out.println(
"singleton4:"
+qb2.tostring());
}
khác
{
hệ thống.out.println(
"Biểu diễn chuỗi của đối tượng này:"
);
hệ thống.out.println(
"singleton3:"
+qb1.tostring());
hệ thống.out.println(
"singleton4:"
+qb2.tostring());
}
|

Có thể thấy rằng cách biểu diễn chuỗi của các đối tượng là khác nhau.
3: Người độc thân Trung Quốc đói khát.
Lớp singleton kiểu Hungry Nó đã được tự khởi tạo khi lớp được khởi tạo.
?
1
2
3
4
5
6
7
8
|
công cộng
lớp học
singleton1 {
riêng tư
singleton1() {}
riêng tư
tĩnh
cuối cùng
singleton1 đơn =
mới
singleton1();
công cộng
tĩnh
singleton1 getinstance() {
trở lại
đơn;
}
}
|
Bởi vì đây là một phương thức được sửa đổi tĩnh nên nó được tạo khi lớp được tải và sẽ không bị thay đổi sau này, vì vậy nó an toàn cho luồng.
Trên đây là toàn bộ nội dung bài viết này hi vọng nó sẽ giúp ích cho việc học của mọi người và cũng mong mọi người ủng hộ mình.
Liên kết gốc: http://blog.csdn.net/jjhahage/article/details/78277105.
Cuối cùng, bài viết về sự kết hợp giữa hình ảnh và văn bản để giải thích mẫu đơn Java có ở đây. Nếu bạn muốn biết thêm về sự kết hợp giữa hình ảnh và văn bản để giải thích mẫu đơn Java, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các phần liên quan. Tôi hy vọng tất cả các bạn ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!