Design Pattern – Creational Pattern – Abstract Factory Pattern


Abstract Factory Pattern được sử dụng khi ta muốn nhóm các factories sản xuất các products có cùng một kiểu hành động.

Ví dụ các Database khác nhau, có cách cấu thành câu truy vấn SQL khác nhau (quotes, delimiter…) (products khác nhau), vì vậy chung một tình huống là truy vấn dữ liệu, và giả sử ta có chung một đối tượng dữ liệu truy vấn cho các products là SelectObject, ta sẽ có:

abstract SQL_Factory with virtue createSqlString(SelectObject) methods
MySQL_Factory extends SQL_Factory implements createSqlString(SelectObject)
MsSQL_Factory extends SQL_Factory implements createSqlString(SelectObject)

In the application:

if(db_adapter == MySQL) $db_Factory = new MySQL_Factory
if(db_adapter == MsSQL) $db_Factory = new MsSQL_Factory
/* Do something to create SelectObject*/
$sql = $db_Factory->createSqlString(SelectObject)
/* Use db connection to execute the sql*/
$results = $db_Factory->getDbConnection()->execute($sq);

2 comments

    1. Bạn đúng!

      Đây là ví dụ thể hiện cách mình hiểu về Pattern này lúc học nó.

      Giờ review lại thì thấy ví dụ trên không đủ rõ ràng để thể hiện một AbstractFactory.

      Ý đồ của mình ở đây là SQL_Factory tạo nên 2 Products:

      createSqlString
      getDbConnection

      MySQL có cách tạo SQLString và DbConnection riêng
      MSSQL có cách tạo SQLString và DbConnection riêng

      Nhưng đúng là ví dụ này không thuyết phục.

      Có lẽ một ví dụ về ApplicationConfigurationFactory sẽ thuyết phục hơn trong đó nó xây dựng nên các thành phần trong application context (SessionHandler, DbConnection, ViewRenderer, etc)

      Cám ơn đã đóng góp.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s