Giới thiệu
Trong bài viết này, chúng ta sẽ tìm hiểu về một design pattern quan trọng trong lập trình hướng đối tượng mà nhiều lập trình viên thường sử dụng: Abstract Factory. Bài viết sẽ so sánh cách triển khai Abstract Factory giữa Java thuần và Spring, giúp bạn hiểu rõ hơn về sự khác biệt và lợi ích của từng phương pháp.
I. Khái Niệm và Kiến Trúc Abstract Factory
Abstract Factory là một mẫu thiết kế cung cấp một giao diện cho việc tạo ra các nhóm đối tượng liên quan mà không cần chỉ định lớp cụ thể của chúng. Theo định nghĩa từ cuốn Design Patterns: Elements of Reusable Object-Oriented Software, mục tiêu của mẫu thiết kế này là tạo ra một interface cung cấp chức năng tạo ra các đối tượng mà có liên quan đến nhau.
1. Các Thành Phần Chính của Abstract Factory
- Abstract Factory: Cung cấp giao diện chung cho các
ConcreteFactory
. - Concrete Factory: Triển khai các phương thức của
AbstractFactory
, trả về cácConcreteProduct
thuộc họ của mình. - Abstract Product: Cung cấp giao diện chung cho các
ConcreteProduct
. - Concrete Product: Triển khai interface
AbstractProduct
, được tạo ra bới cácConcreteFactory
.
II. Thực Hành Implement Abstract Factory
1. Yêu Cầu Bài Toán
Chúng ta cần phát triển phần mềm mô phỏng giao diện người dùng (GUI) cho cả hai hệ điều hành là iOS và Windows. Giao diện sẽ có hai thành phần chính: dialog và button, cho phép người dùng thấy và tương tác với các thành phần này.
2. Phân Tích Yêu Cầu
Families (Họ đối tượng): Chúng ta có hai họ đối tượng chính là iOS và Windows. Mỗi họ sẽ có các phiên bản cụ thể của Dialog và Button.
Application: Chịu trách nhiệm quản lý tương tác của người dùng và chứa các Dialog và Button được khởi tạo từ các factory tương ứng.
3. Triển Khai Bằng Java
Dưới đây là cách triển khai Abstract Factory bằng Java:
Diễn Giải Các Lớp
-
Dialog: Giao diện chứa các phương thức
render()
vàshow()
. -
Button: Giao diện chứa các phương thức
render()
vàclick()
. -
Factory Classes: Các lớp
WindowsGuiFactory
vàIosGuiFactory
sẽ tạo ra các đối tượng Dialog và Button tương ứng. -
Mã Java ví dụ cho Dialog và Button
public interface Dialog { void show(); void render(); }
public interface Button { void render(); void click(); }
- Lớp Factory
public class WindowsGuiFactory implements GuiAbstractFactory {
@Override public Dialog createDialog() { return new WindowsDialog(); }
@Override public Button createButton() { return new WindowsButton(); }
}
4. Triển Khai Bằng Spring
Khi sử dụng Spring, chúng ta có thể tận dụng tính năng IoC của nó. Chúng ta sẽ tạo thêm một lớp có tên GuiFactoryBeanManager
để quản lý các factory tương ứng. Mẫu sau đây cho thấy cách triển khai:
- Spring Factory Manager
public GuiAbstractFactory getInstance() throws Exception { ... }
III. Kết Luận
Chúng ta đã hoàn thành việc so sánh cách implement Abstract Factory giữa Java và Spring. Cả hai cách tiếp cận đều có ưu điểm riêng tùy thuộc vào ngữ cảnh sử dụng. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại phản hồi ở phần bình luận.
IV. Tài Liệu Tham Khảo
- Refactoring.guru
- Head First Design Patterns - O'Reilly
- Design Patterns: Elements of Reusable Object-Oriented Software - GoF
Nếu bạn thấy bài viết này hữu ích, hãy nhấn upvote và theo dõi để không bỏ lỡ các phần tiếp theo của series này.
source: viblo