[Nhóm Creational] Mẫu Abstract Factory
Mẫu Abstract Factory
I. Khái niệm
Mẫu Abstract Factory bao gồm
một lớp Factory trừu tượng (là interface hoặc lớp abstract) và các lớp con Factory
cụ thể có chức năng tạo ra một tập hợp các đối tượng Product có liên quan hoặc
phụ thuộc lẫn nhau.
Trong đó:
AbstractFactory: định nghĩa một lớp trừu tượng cho việc khởi tạo các "sản phẩm" ảo (AbstractProduct).
ConcreteFactory: là lớp con kế thừa AbstractFactory để tạo ra
"sản phẩm" cụ thể.
AbstractProduct: định nghĩa một lớp trừu tượng cho một loại đối
tượng "sản phẩm".
Product: là lớp con kế thừa từ lớp "sản phẩm" ảo
AbstractProduct, là các "sản phẩm" cụ thể.
Client: sử dụng các lớp AbstractFactory và AbstractProduct
trong hệ thống.
II. Tần suất sử dụng
Cao
III. Ví dụ tình huống
Giả sử ta có lớp điện thoại
và lớp máy tính, trong mỗi lớp này lại phân cấp thành hai lớp con là cao cấp và
bình dân, ta lại có nhu cầu là tạo các sản phẩm cao cấp ở một nhà máy loại 1,
các sản phẩm bình dân ở một nhà máy loại 2. Lớp Client ở đây là lớp hàng mẫu, sẽ
bao gồm một điện thoại mẫu và một máy tính mẫu. Cách tối ưu để tạo lập cho bài
toán này là sử dụng mẫu Abstract Factory.
Ta có hình sau:
Code:...
IV. Đút kết kinh nghiệm
Khi gặp các bài toán có dạng sau ta nên dùng mẫu
Abstract Factory trong việc tạo lập:
- Có nhiều hơn 2 sản phẩm, mỗi sản phẩm lại phân làm
các loại sản phẩm con 1, 2,..
- Có nhu cầu sản xuất riêng các sản phẩm con loại 1 với
các sản phẩm con loại 2.
Giải pháp :
- Tạo nhà máy thỏa mãn nhu cầu chỉ sản xuất riêng các
sản phẩm con loại 1.
- Tạo nhà máy thỏa mãn nhu cầu chỉ sản xuất riêng các
sản phẩm con loại 2.
- Tạo một nhà máy tổng quát làm lớp cha cho hai loại
nhà máy trên.
- Lớp Client sẽ dùng biến nhà máy tổng quát này để tạo
lập.
V. Mẫu liên quan
Abstract Factory thường được
cài đặt cùng với Singleton. Các lớp con cụ thể (concrete class, ở đây ví dụ là
Nhà_Máy_Loại_1 và Nhà_Máy_Loại_2) thường được cài đặt bằng Singleton. Bởi Singleton
có thể tạo ra những đối tượng đồng nhất cho dù chúng ta gọi nó ở đâu trong
chương trình.
Nguồn: LMinh
Nhận xét
Đăng nhận xét