Singleton Pattern
+---------------------------+
| DatabaseConnection |
+---------------------------+
| - instance (static) |
| - connection |
+---------------------------+
| + constructor() |
| + getInstance() (static) |
+---------------------------+
Factory method pattern
+------------------+
| Document |
| (Abstract Class) |
+------------------+
| + open() |
| + close() |
+------------------+
▲
┌──────────────┼──────────────┐
| | |
+----------------+ +----------------+ +----------------+
| WordDocument | | PdfDocument | | ExcelDocument |
+----------------+ +----------------+ +----------------+
| + open() | | + open() | | + open() |
| + close() | | + close() | | + close() |
+----------------+ +----------------+ +----------------+
+-------------------------+
| DocumentFactory |
+-------------------------+
| + createDocument(type) |
+-------------------------+
Abstract Factory Pattern
===== ABSTRACT PRODUCTS =====
+-----------+ +------------+
| Button | | Checkbox |
+-----------+ +------------+
▲ ▲
┌────────┘ └────────┐
| |
+------------------+ +------------------+
| WindowsButton | | WindowsCheckbox |
+------------------+ +------------------+
+------------------+ +------------------+
| MacButton | | MacCheckbox |
+------------------+ +------------------+
===== ABSTRACT FACTORY =====
+---------------------------+
| UIFactory |
+---------------------------+
| + createButton() |
| + createCheckbox() |
+---------------------------+
▲
┌─────────┴─────────┐
| |
+-------------------+ +-------------------+
| WindowsFactory | | MacFactory |
+-------------------+ +-------------------+
| + createButton() | | + createButton() |
| + createCheckbox()| | + createCheckbox()|
+-------------------+ +-------------------+
Decorator Pattern
+------------------+
| Coffee | <<Component>>
+------------------+
| + cost() |
| + description() |
+------------------+
▲
|
+----------------------+
| CoffeeDecorator | <<Decorator>>
+----------------------+
| - coffee: Coffee |
+----------------------+
| + cost() |
| + description() |
+----------------------+
▲
┌─────────────────┼──────────────────┐
| | |
+----------------+ +----------------+ +----------------------+
| MilkDecorator | | SugarDecorator | | ChocolateDecorator |
+----------------+ +----------------+ +----------------------+
| + cost() | | + cost() | | + cost() |
| + description()| | + description()| | + description() |
+----------------+ +----------------+ +----------------------+
State Pattern
+------------------+
| State | <<abstract>>
+------------------+
| + handle(ctx) |
+------------------+
▲
┌───────────┴───────────┐
| |
+---------------+ +---------------+
| OnState | | OffState |
+---------------+ +---------------+
| + handle() | | + handle() |
+---------------+ +---------------+
| |
| setState(Off) | setState(On)
└───────────┬───────────┘
▼
+------------------+
| Light | <<Context>>
+------------------+
| - state: State |
+------------------+
| + setState() |
| + toggleSwitch() |
+------------------+
Observer Pattern
+----------------------+
| Subject |
+----------------------+
| - observers[] |
+----------------------+
| + attach() |
| + detach() |
| + notify(event) |
+----------------------+
▲
|
+----------------------+
| StockPrice |
+----------------------+
| - symbol |
| - price |
+----------------------+
| + setPrice() |
+----------------------+
+----------------------+
| Observer | <<abstract>>
+----------------------+
| + update(event) |
+----------------------+
▲
┌────────────┴────────────┐
| |
+---------------------+ +---------------------+
| EmailNotifier | | SMSNotifier |
+---------------------+ +---------------------+
| + update(event) | | + update(event) |
+---------------------+ +---------------------+
Strategy Pattern
+------------------------+
| PaymentStrategy | <<abstract>>
+------------------------+
| + pay(amount) |
+------------------------+
▲
┌────────────┴────────────┐
| |
+------------------------+ +------------------------+
| CreditCardPayment | | MobilePayment |
+------------------------+ +------------------------+
| + pay(amount) | | + pay(amount) |
+------------------------+ +------------------------+
+------------------------+
| ShoppingCart | <<Context>>
+------------------------+
| - paymentStrategy |
+------------------------+
| + setPaymentStrategy() |
| + checkout(amount) |
+------------------------+
So Sánh Các Phong Cách Kiến Trúc Hệ Thống (Architecture Styles Comparison)
Bảng tổng hợp dưới đây so sánh các đặc tính quan trọng của 5 phong cách kiến trúc phổ biến dựa trên tài liệu đánh giá đặc tính kiến trúc.
Bảng Tổng Hợp Đánh Giá (Thang điểm 1 - 5)
| Đặc tính kiến trúc |
Layered |
Pipeline |
Microkernel |
Service-Based |
Event-Driven |
| Khả năng triển khai (Deployability) |
1 |
2 |
3 |
4 |
3 |
| Độ co giãn (Elasticity) |
1 |
1 |
1 |
2 |
3 |
| Khả năng tiến hóa (Evolutionary) |
1 |
3 |
3 |
3 |
5 |
| Khả năng chịu lỗi (Fault Tolerance) |
1 |
1 |
1 |
4 |
5 |
| Tính module (Modularity) |
1 |
3 |
3 |
4 |
4 |
| Hiệu năng (Performance) |
2 |
2 |
3 |
3 |
5 |
| Độ tin cậy (Reliability) |
3 |
3 |
3 |
3 |
3 |
| Khả năng mở rộng (Scalability) |
1 |
1 |
1 |
3 |
5 |
| Khả năng kiểm thử (Testability) |
2 |
3 |
3 |
4 |
2 |
| Độ đơn giản (Simplicity) |
5 |
5 |
4 |
3 |
1 |
| Chi phí tổng thể (Overall Cost) |
5 |
5 |
5 |
4 |
3 |
Ghi chú về thang điểm:
- 5 điểm: Xuất sắc / Rất tốt / Rẻ nhất / Đơn giản nhất.
- 1 điểm: Kém / Yếu / Rất phức tạp / Tốn kém.
Tóm tắt đặc điểm chính
1. Layered & Pipeline (Đơn giản & Tiết kiệm)
- Ưu điểm: Cực kỳ đơn giản (5/5), chi phí triển khai thấp nhất.
- Nhược điểm: Khả năng mở rộng và co giãn rất kém (1/5). Phù hợp cho các ứng dụng nhỏ hoặc ứng dụng nội bộ đơn giản.
2. Microkernel (Kiến trúc Plug-in)
- Đặc điểm: Cân bằng giữa chi phí và tính linh hoạt.
- Phù hợp: Các hệ thống cần khả năng tùy biến cao thông qua các thành phần bổ trợ (plug-ins).
3. Service-Based (Linh hoạt & Hiện đại)
- Ưu điểm: Khả năng triển khai và kiểm thử rất tốt (4/5). Phân vùng theo Domain giúp quản lý nghiệp vụ tốt hơn.
- Phù hợp: Các hệ thống doanh nghiệp tầm trung cần sự ổn định và nhanh chóng đưa tính năng mới ra thị trường.
4. Event-Driven (Hiệu năng tối đa)
- Ưu điểm: Đứng đầu về hiệu năng, khả năng mở rộng và tiến hóa (5/5). Chịu lỗi cực tốt.
- Nhược điểm: Rất phức tạp để triển khai và kiểm thử (Simplicity chỉ đạt 1/5). Phù hợp cho các hệ thống thời gian thực, dữ liệu lớn.