Sự định nghĩa. Mẫu đơn là một mẫu thiết kế hạn chế việc khởi tạo một lớp cho một đối tượng
Bây giờ chúng ta hãy xem các triển khai khác nhau của mẫu Thiết kế Singleton.
Phương pháp 1. Mẫu thiết kế Monostate/Borg Singleton
Hành vi của Singleton có thể được thực hiện theo mẫu của Borg nhưng thay vì chỉ có một thể hiện của lớp, có nhiều thể hiện có cùng trạng thái. Ở đây chúng tôi không tập trung vào việc chia sẻ danh tính cá thể thay vào đó chúng tôi tập trung vào trạng thái chia sẻ.
Python3
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B020
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B021
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B022
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B024
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B026
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B01
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B02
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B04
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B06
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B07
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B08
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B09
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B08
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE902
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B08
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE905
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B08
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE908
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0200
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B06
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0203
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B08
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B09
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0207
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B08
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE908
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0210
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0211
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0212
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0215
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0216
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0218
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0220
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0221
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0223
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0220
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0221
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0228
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0220
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0221
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0233
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0235
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0236
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0238
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0240
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0241
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0244
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0245
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0248
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0245
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0231
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0233
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0234
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0236
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0244
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0260
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0248
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0260
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0267
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0260
đầu ra.
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B02
Singleton-Design-pattern
Khóa kiểm tra kép Mẫu thiết kế Singleton
Dễ dàng nhận thấy rằng khi một đối tượng được tạo, việc đồng bộ hóa luồng không còn hữu ích nữa vì bây giờ đối tượng sẽ không bao giờ bằng Không và bất kỳ chuỗi thao tác nào cũng sẽ dẫn đến kết quả nhất quán.
Vì vậy, khi đối tượng bằng Không, thì chỉ khi đó chúng ta mới có được Khóa trên phương thức getInstance.
Python3
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0269
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B000
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B001
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B021
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B003
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B004
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B09
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B007
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B009
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B011
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B013
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B015
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B017
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B019
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B021
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B06
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B024
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B025
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B09
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B028
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0211
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B031
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B025
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B033
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B034
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B035____025
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B037
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B038
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0211
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B031
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B025
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B033
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B043
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B025
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B045
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B025
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B02
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B050
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0207
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B025______045
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0210
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0211
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0212
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B060
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0216
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B063
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B021
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B066
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B068
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B070
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B021
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B073
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE900
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B068
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B077______00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B079
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B081
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B00
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B083
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B085
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B086
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B087
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B031
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B089
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B085
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B086
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B087
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B094
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B085
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B089
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B087
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B099
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9002
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9003
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9004
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9002
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9008
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9009
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9002
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9013
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9014
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B023
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0243
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9002
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9018
__main__.Singleton object at 0x014FFE90 __main__.Singleton object at 0x014FFE9019
đầu ra.
A1 : __main__.X object at 0x02EA2590 A2 : __main__.X object at 0x02EA2590 B1 : __main__.Y object at 0x02EA25B0 B2 : __main__.Y object at 0x02EA25B0
Tạo một singleton trong Python
Trong triển khai cổ điển của mẫu Thiết kế Singleton, chúng tôi chỉ cần sử dụng phương thức tĩnh để tạo phương thức getInstance có khả năng trả về tài nguyên được chia sẻ. Chúng tôi cũng sử dụng cái gọi là Trình xây dựng riêng ảo để tăng ngoại lệ chống lại nó mặc dù nó không bắt buộc lắm