Vietnamese Developers’ Blog

Prototype Pattern

Posted in Design Pattern by Hoang Tran on November 5, 2007

Trong quyển GoF Design Pattern có 23 mẫu thiết kế và khi được phân chia theo mục đích sử dụng thì có 5 mẫu kiến tạo (creational pattern) bao gồm: Abstract factory, Builder, Factory method, Prototype và Singleton. Creational Pattern trừu tượng hóa quá trình khởi tạo object. Các mẫu creational giúp hệ thống không phải phụ thuộc vào cách một object được tạo ra, xây dựng và thể hiện.

1. Mục đích và ý nghĩa

Prototype Pattern giúp cho việc khởi tạo object bằng một object nguyên mẫu (prototype), là copy của object “mẫu” đó. Ý tưởng của mẫu là chúng ta được cung cấp một object và sẽ dùng chính object này để như là một hình mẫu (template) khi cần tạo lập một đối tượng mới. Việc tạo lập object mới sẽ dựa trên object mẫu mà không sử dụng toán tử new hoặc constructor … được cụng cấp bởi ngôn ngữ lập trình. Lý do là chúng ta không biết được thông tin nội tại chi tiết bên trong object và object có thể che dấu và chỉ cung cấp ra bên ngoài một lượng thông tin giới hạn. Do vậy ta không thể dùng toán tử new và sao chép những dữ liệu được object cung cấp (vốn không đầy đủ) cho một object mới. Cách tốt nhất là để cho chính object “mẫu” tự xác định thông tin và dữ liệu sao chép.

2. Cấu trúc

- Prototype: Cung cấp interface để copy chính bản thân nó (phương thức clone())

- ConcreatePrototype: Implement interface được cung cấp bởi Prototype để copy chính bản thân nó. (thể hiện cụ thể phương thức clone())

- Client: Tạo một object mới bằng cách yêu cầu prototype copy chính bản thân nó.

(more…)

Tagged with:

Singleton Pattern – Fundamental

Posted in Design Pattern by Hoang Tran on October 8, 2007

Singleton có lẽ là một trong những pattern có tính trừu tượng dễ hiểu nhất mà người học design pattern nào cũng biết. Trong dự án vừa rồi tôi có phải implement một cái database connection pool và thread pool mà nó chính xác là một singleton object. Tôi đã chọn Singleton để implement những class đó. Tất nhiên singleton chỉ là một phần nhỏ, không phải phần cốt lõi trong những cái pool đó, nhưng trong bài viết này tôi sẽ viết về singleton pattern như là bài viết đầu tiên về loạt bài design pattern tiếp theo. Những bài viết của tôi thường lấy ý tưởng từ những quyển sách kinh điển (nhiều khi là dịch lại – vì họ viết quá xuất sắc và không có gì cần thêm hay bớt). Tôi chỉ cố gắng hiểu một cách sâu sắc nhất và ghi lại theo cách hiểu. Trong ví dụ về design pattern, tôi chọn quyển Gang Of Four – Design Patterns – Elements of Reusable Object-Oriented Sofware, một quyển sách kinh điển nhất về design pattern. Nếu bạn có thời gian thì hãy dành thời gian đọc nó (bằng tiếng Anh để hiểu sâu sắc hơn).

1. Mục đính và ý nghĩa.

- Đảm bảo rằng một class có duy nhất một thực thể (instance) hay đối tượng (object) và cung cấp một cách thức truy nhập toàn cục để có thể từ bất kỳ đâu cũng lấy được instance duy nhất đó. Chúng ta cũng gọi thực thể duy nhất đó là thực thể chính (solely) của class đó.

Đối với một vài class thì việc chỉ có duy nhất một instance (object) là rất quan trọng. Mặc dù có rất nhiều máy in trong hệ thống nhưng chỉ có một printer spooler. Cũng chỉ có một file system và một windows manager. Cũng như trong thiết kế connection pool thì chỉ có một connection pool quản lý nhiều connection.

Làm thế nào để chúng ta đảm bảo một class chỉ có một thể hiện duy nhất và dễ dàng truy nhập được? Một object toàn cục có thể làm cho nó dễ dàng truy nhập được nhưng không ngăn cấm bạn tạo thêm nhiều object khác.

Một giải pháp tốt hơn là làm cho class đó tự bản thân nó có thể điều khiển được thực thể chính của nó. Class đó có thể đảm bảo rằng không có thực thể khác được tạo ra (bằng cách chặn đứng các yêu cầu tạo object mới) và cung cấp cách thức để truy nhập được thực thể chính của nó. Đó là singleton pattern.

2. Cấu trúc

(more…)

Tagged with: ,