Design Patterns: Flyweight

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Thuộc nhóm: Structural

Tần suất sử dụng: Thấp trung bình

Vấn đề đặt ra

Một vài ứng dụng có thể được lợi từ việc sử dụng các đối tượng xuyên suốt thiết kế của chúng, nhưng một cài đặt không tốt sẽ cản trở điều đó.Trong tình huống này chúng ta sẽ dùng mẫu thíêt kế Flyweight để giải quyết.

Định nghĩa

Mẫu thiết kế Flyweight là mẫu thiết kế được sử dụng việc chia xẻ để trợ giúp một lượng lớn các đối tượng một cách hiệu quả.

Việc sử dụng mẫu này cần chú ý rằng :các hiệu ứng của Flyweight pattern đòi hỏi rất nhiều vào việc nó được sử dụng ở đâu và sử dụng nó như thế nào. Sử dụng Flyweight pattern khi tất cả cá điều sau đây là đúng:

  • Một ứng dụng sử dụng một lượng lớn các đối tượng.
  • Giá thành lưu trữ rất cao bởi số lượng các đối tượng là rất lớn.
  • Hầu hết trạng thái của các đối tượng có thể chịu tác động từ bên ngoài.
  • Ứng dụng không yêu cầu đối tượng đồng nhất. Khi các đối tượng flyweight có thể bị phân tách, việc kiểm tra tính đồng nhất sẽ trả về đúng cho các đối tượng được định nghĩa dựa trên các khái niệm khác nhau.

Sơ đồ UML

Flyweight: Sơ đồ UML

Flyweight (Character)

  • Khai báo một giao diện qua Flyweight mà có thể nhận và hành động nằm ngoài trạng thái

ConcreteFlyweight (CharacterA, CharacterB, ..., CharacterZ)

  • Cài đặt giao diện Flyweight và thêm phần lưu trữ cho các trạng thái ngoài. -- Một đối tượng Concrete Flyweight phải được chia sẽ. Bất cứ một trạng thái nào nó lưu trữ đều phải là ở bên ngoài, phải độc lập với ngữ cảnh của đối tượng ConcreteFlyweight

UnsharedConcreteFlyweight ( not used )

  • Không phải tất cả các lớp con đều cẩn phải chia sẽ. Giao diên Flyweight cho phép chia sẽ, nhưng điều đó là không bắt buộc. Nó là thông dụng cho đối tượng UnsharedConcreteFlyweight để có đối tượng ConcreteFlyweight như đối tượng con ở các mức trong cấu trúc đối tượng Flyweight.

FlyweightFactory (CharacterFactory)

  • Tạo và quản lý đối tượng flyweight
  • Đảm bảo rằng flyweight được chia sẽ một cách đúng đắn. Khi đối tượng khách yêu cầu một đối tượng flyweight cung cấp một thể nghiệm đã tồn tài hoặc tạo một cái khác, nếu nó chưa có.

Client (FlyweightApp)

  • Duy trì một tham chiếu đến Flyweight
  • Tính toán hoặc lưu trữ trạng thái ngoài của Flyweight

Mẫu liên quan

Mẫu Flyweight thường kết hợp với mẫu Composite để cài đặt cấu trúc phân cấp lôgic trong giới hạn của một sơ đồ vòng xoắn trực tiếp với các lá chia sẻ của nó.

Thường tốt nhất là cài đặt các mẫu State và Strategy giống như là flyweight.

» Tiếp: Proxy
« Trước: Facade
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!