Design Patterns - Object Pool

Mở đầu

Performance có thể đôi khi cũng là vấn đề lớn trong việc phát triển phần mềm và việc tạo ra object là một step cần phải được cân nhắc. Trong khi prototype pattern giúp cho việc cải thiện performance bằng cách cloning object, Object pool pattern cung cấp một kỹ thuật để tái sử dụng objects thay vì khởi tạo không kiểm soát.

Mục đích

Tái sử dụng và share objects cần sử dụng thay vì khởi tạo không kiểm soát.

Triển khai object pool pattern

objectpool-implementation-uml-class-schema-300x150.gif

Việc triển khai sẽ bao gồm những object sau:

  • Reuseable : là một warps class limited, được share bởi một số client với việc giới hạn time.
  • Client : sử dụng instand của Reuseable
  • ReuseablePool : quản lý những object của Reuseable được sử dụng ở Client , khởi tạo và quản lý một pool của tất cả các object.

Khi một client yêu cầu sử dụng một reuseable object , reuseablePool sẽ thực hiện các bước:

  1. Tìm kiếm một Reuseable có sẵn, nếu tồn tại thì trả về cho client
  2. Nêu không tồn tại nó sẽ tạo ra một object, nếu việc khởi tạo thành công, object này sẽ được trả về cho client.
  3. Nếu việc khởi tạo không thành công thì nó sẽ chờ cho tới khi có một Reuseable object được release.

Tại sao sử dụng Object pool?

Về cơ bản, bạn sẽ sử dụng một "object pool" bất cứ khi nào có một "client" có nhu cầu sử dụng tương tự thay vì khởi tạo một object mới không có kiểm soát.

Nên sử dụng nó ở đâu?

Ví dụ về một connection tới database chẳng hạn, Nếu có quá nhiều kết nối đến database được tạo ra sẽ ảnh hưởng rất performance, và có thể db server sẽ overload. Ngoài ra, sẽ thường xảy ra các exception liên quan đến business. Do đó, việc sử dụng cả object pool pattern và singleton pattern cho tình huống này là một sự lựa chọn tinh tế.

Lời kết

Để nâng cao performance của hệ thống, việc khởi tạo object cần phải được cân nhắc một cách kỹ lưỡng và sử dụng object pool pattern hợp lý sẽ là một giải pháp tuyệt vời cho bạn.