Thực tiễn tốt nhất để triển khai Singletons trong Perl là gì?Làm thế nào tôi có thể thực hiện một lớp singleton trong perl?
Trả lời
Bạn có thể sử dụng mô-đun Class::Singleton.
Lớp "Singleton" cũng có thể dễ dàng được triển khai bằng cách sử dụng biến số my
hoặc state
(sau này có sẵn từ Perl 5.10). Nhưng hãy xem bình luận của @ Michael bên dưới.
package MySingletonClass;
use strict;
use warnings;
use feature 'state';
sub new {
my ($class) = @_;
state $instance;
if (! defined $instance) {
$instance = bless {}, $class;
}
return $instance;
}
Điều này không thành công nếu mô đun được phân lớp; biến cá thể cần phải sống trong gói cuối cùng. Class :: Singleton được quyền này. –
Nó không thực sự "thất bại" nếu nó được thừa hưởng. Lớp kế thừa chỉ cần truy cập và tương tác với đối tượng singleton như bất kỳ lớp nào khác. Tuy nhiên, tất cả phụ thuộc vào những gì bạn đang cố gắng làm. –
Nếu bạn đang sử dụng Moose, thì MooseX::Singleton. Giao diện của nó tương thích với Class :: Singleton.
Singleton Tóm tắt:
- Phần lớn thời gian một đối tượng bình thường sẽ làm việc.
- Hãy cẩn thận với người độc thân.
- Khoanh vùng tương tác càng nhiều càng tốt
Trong khi độc thân là một ý tưởng tốt đẹp, tôi có xu hướng chỉ cần thực hiện một đối tượng bình thường và sử dụng nó. Nếu nó là quan trọng mà tôi chỉ có một đối tượng như vậy, tôi sẽ sửa đổi constructor để ném một ngoại lệ gây tử vong khi đối tượng thứ hai được tạo ra. Các mô-đun singleton khác nhau dường như không làm gì nhiều ngoài việc thêm một phụ thuộc.
Tôi làm điều này vì nó rất dễ, nó hoạt động, và khi trong một tương lai kỳ lạ nào đó tôi cần làm việc với đối tượng thứ hai trong ứng dụng của tôi, những thay đổi sẽ được giảm thiểu.
Tôi cũng muốn bản địa hóa tương tác với các đối tượng 'singleton' của mình - giữ tương tác ở ít địa điểm nhất có thể. Vì vậy, thay vì mọi đối tượng có quyền truy cập trực tiếp vào singleton, tôi dàn xếp tất cả tương tác thông qua đối tượng "Ứng dụng" của tôi. Bất cứ khi nào có thể, đối tượng ứng dụng nhận dữ liệu từ 'singleton' và chuyển nó thành tham số cho phương thức trong các đối tượng khác. Câu trả lời từ các đối tượng khác cũng có thể được cắt và chuyển đến 'singleton'. Tất cả nỗ lực này giúp khi tôi cần thay đổi đối tượng 'singleton' và khi tôi muốn sử dụng lại các đối tượng khác trong một ứng dụng khác có thể không cần hoặc không thể sử dụng đối tượng 'singleton' gốc.
Tôi nghĩ rằng bạn đang thiếu điểm của singleton. Đó là một khuôn mẫu bạn có thể sử dụng, do đó bạn không phải làm tất cả các hòa giải phức tạp. Bạn không cần phải sử dụng nó, nhưng không giảm giá nó đơn giản chỉ vì bạn không cần nó. Không phải mọi thứ đều phù hợp với đề án mà bạn đã mô tả. –
- 1. Làm thế nào tôi có thể kiểm tra một lớp Singleton với DUnit?
- 2. Làm thế nào tôi có thể nhận được perl grep thực hiện biểu thức regex chụp
- 3. Mẫu Singleton Force trên một Lớp thực hiện Giao diện
- 4. Làm thế nào để kiểm tra một lớp Singleton?
- 5. Làm thế nào tôi có thể thực hiện một sưu tập có điều kiện trong groovy
- 6. Làm thế nào tôi có thể thực hiện SMTP được xác thực trong C#
- 7. Làm thế nào tôi có thể phát hiện hệ điều hành trong Perl?
- 8. Làm thế nào tôi có thể xác định lại các phương thức lớp Perl?
- 9. Làm thế nào tôi có thể lưu trữ và truy cập một filehandle trong một lớp Perl?
- 10. Làm thế nào tôi có thể lấy tên của chương trình con hiện tại trong Perl?
- 11. Làm thế nào tôi có thể thực hiện, "Tôi là ông của riêng tôi", trong Prolog?
- 12. Làm thế nào tôi có thể buộc các lớp kế thừa để thực hiện một phương thức tĩnh trong C#?
- 13. Làm thế nào tôi có thể ping một máy chủ với một Perl một lớp lót với Net :: Ping?
- 14. Trong Perl, làm thế nào tôi có thể gọi một phương thức có tên tôi có trong một chuỗi?
- 15. Làm thế nào tôi có thể thay thế có điều kiện trong Perl?
- 16. Làm thế nào tôi có thể ssh bên trong một kịch bản Perl?
- 17. Làm thế nào tôi có thể sử dụng một biến như một tên biến trong Perl?
- 18. Làm thế nào tôi có thể thực hiện công việc perltidy với Phương pháp :: Chữ ký?
- 19. Làm thế nào tôi có thể in chỉ một dòng mới unix trong Perl trên Win32?
- 20. Làm thế nào tôi có thể trích xuất các chất nền từ một chuỗi trong Perl?
- 21. Làm thế nào tôi có thể lưu trữ ảnh chụp regex trong một mảng trong Perl?
- 22. Làm thế nào tôi có thể tìm thấy số lượng khóa trong một băm trong Perl?
- 23. Làm thế nào tôi có thể phân bổ trước một chuỗi trong Perl?
- 24. Làm thế nào để thay thế một chuỗi trong một tệp hiện có trong Perl?
- 25. Làm thế nào tôi có thể lặp qua nhiều danh sách cùng một lúc trong Perl?
- 26. thực hiện Singleton Ngoài ra
- 27. Làm thế nào tôi có thể bọc một chuỗi trong Perl?
- 28. Làm thế nào tôi có thể tuần tự hóa một đóng cửa trong Perl?
- 29. Làm thế nào tôi có thể ghi đè lên một hàm lớp cha với con trong Perl?
- 30. Làm thế nào tôi có thể nhận được lớp hiện tại của một div với jQuery?
Cách thực hành tốt nhất để triển khai thực đơn là ** Không! ** –
@gbacon - lý do gì để chống lại việc triển khai sigletons? Tôi đã không bao giờ sử dụng chúng rộng rãi (hoặc gần như không bao giờ) nhưng tôi không biết bất kỳ lý do gì để tránh chúng thay vì chỉ không nhất thiết cần chúng. – DVK
@DVK Một singleton là một biến toàn cầu mặc một bộ đồ lạ mắt. –