Creational Pattern: Abstract Factory

Xem: 3167    Tải: 0   Thảo luận: 0   Mục: C / C++ / MFC   Lĩnh vực: Máy tính - công nghệ

0 điểm   ( 8 đánh giá ) File đã được kiểm thử


Khái niệm:

Cung cấp một interface cho việc tạo ra một “dòng” (family) các loại đối tượng liên quan hoặc phụ thuộc mà không cần xác định những lớp cụ thể của chúng.

Mức độ sử dụng: cao

UML Class Diagram:

Những lớp và/hoặc các đối tượng trong mẫu thiết kế này:

- AbstractFactory (ContientFactory): khai báo một interface cho các hoạt động tạo các abstract product.

- ConcreteFactory (Africafactory, AmericaFactory): thực thi các hoạt động để tạo các đối tượng concrete product.

- AbstractProduct (Herbivore, Carnivore): khai báo một interface cho một kiểu đối tượng product.

- Product (Wildebeest, Lion, Bison, Wolf): định nghĩa một đối tượng product được tạo bởi concrete factory tương ứng thực thi AbstractFactory interface.

- Client (AnimalWorld): sử dụng các interface được khai báo bởi các lớp AbstractFactory và AbstractProduct.

Abstract Factory: khi nào sử dụng và sử dụng ở đâu

Mẫu thiết kế Abstract Factory cung cấp một lớp tạo ra các đối tượng khác liên quan bởi một “khuôn mẫu” (theme) chung. Ví dụ điển hình là một factory thành phần UI tạo ra các UI control cho các hệ thống cửa sổ khác nhau như Windows, Motif hay MacOS.

Trải qua thời gian, ý nghĩa của mẫu thiết kế Abstract Factory đã phát triển tương ứng theo khái niệm của GoF (Gangs of Four). Ngày nay, khi lập trình viên nói về mẫu thiết kế này, họ không chỉ đề cập đến ý nghĩa của việc tạo ra một “dòng” (family) các đối tượng liên quan hoặc phụ thuộc mà còn có một ý kiến khá đơn giản nữa, đó là việc tạo ra “individual object instances”.

Bạn có thể tự hỏi rằng tại sao lại tạo ra các đối tượng bằng việc dùng một lớp khác (được gọi là Abstract Factory) hơn là gọi trực tiếp hàm dựng của nó. Sau đây là một vài lý do:

- Các hàm dựng bị hạn chế trong việc kiểm soát của chúng qua các tiến trình tạo lập tổng thể. Nếu ứng dụng của bạn cần nhiều sự điều khiển hơn, hãy xem xét dùng Factory.

- Ngoài ra, có những lần khi client không biết chính xác kiểu nào cần xây dựng. Điều đó sẽ trở nên dễ dàng hơn để code đối với một kiểu cơ bản hoặc một interface và sau đó để cho factory quyết định giúp cho client. Ví dụ cho vấn đề này đó là các đối tượng ADO.NET provider (DbConnection, DbCommand, DbAdapter,…)

- Các hàm dựng không liên lạc tốt vì chúng phải được đặt tên sau khi lớp của nó đã đặt tên. Có nhiều hàm dựng quá tải (overloaded constructor) có thể làm cho việc này trở nên khó khăn cho lập trình viên client quyết định chọn hàm dựng nào để dùng. Dưới đây là một ví dụ với 4 overloaded constructor. Thật không rõ ràng để chọn ra một constructor để sử dụng.

Mẫu thiết kế Factory làm code trở nên có hàm ý nhiều hơn

Demo:

Creational Pattern: Abstract Factory

Creational Pattern: Abstract Factory Đăng ngày 18-02-2014  Cung cấp một interface cho việc tạo ra một “dòng” (family) các loại đối tượng liên quan hoặc phụ thuộc mà không cần xác định những lớp cụ thể của chúng. 5/10 3167

Thảo luận:

Để bình luận bạn phải đăng nhập thành viên.

File tương tự

Files cùng mục

 

File tải nhiều nhất

Megacode.vn - Thư viện mã nguồn chia sẻ, tải file cho cộng đồng
Copyright © 2013-2016. All rights reserved. Bản quyền thuộc VinaGon
Địa chỉ: Số 38 Hàng Bè, Hàng Bạc, Hoàn Kiếm, Hà Nội.
Văn phòng giao dịch: Phòng 28, Tầng 6, HH1A Linh Đàm, Hoàng Mai, Hà Nội
Email: info@vinagon.com | Website: www.vinagon.com | Điện thoại: (+844) 6. 32.979.36;
logo megacode

Megacode đã đăng ký với Bộ Công Thương
Thư viện mã nguồn mở lớn nhất Việt Nam.



Hỗ trợ khách hàng trên Megacode
Hỗ trợ kỹ thuật cho thành viên:
Tổng đài: (+844) 6. 32.979.36
Số di động (Hotline): 0969.091.265
Thời gian làm việc:
Sáng: 8h-12h; Chiều: 13h30-17h30
(Nghỉ chiều T7, CN và các ngày lễ, tết)
Chat với Megacode
https://www.facebook.com/megacodevn