Design pattern là gì ?
Design Pattern là bộ môn thuộc về ngành khoa học máy tính chuyên nghiên cứu các kiên trúc phần mềm. Hiện nay tất cả các Framwork như Codeigniter, Zend, Laravel, ... đều có sử dụng nhữ kiến trúc design pattern có sẵn và mỗi Framwork sẽ có những kiểu design partern riêng. Design Pattern sử dụng nền tảng của lập trình hướng đối tượng, áp dụng các tính chất như tính kế thừa, hàm khởi tạo, tính đa hình, ... để làm nên những kiến trúc phần mềm đáp ứng cho project của họ.
Một ví dụ điển hình về design pattern và được biết đến nhiều nhất tron PHP là cấu trúc MVC
Ngoài ra còn một số pattern sau chúng ta sẽ từ từ tìm hiểu
Danh sách các mẫu design pattern
Tham khảo từ wikipedia
Các mẫu tạo lập
[creational patterns]
- Abstract factory pattern
- Builder
- Factory method pattern
- Prototype
- Singleton
Các mẫu cấu trúc
[structural patterns]
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
Các mẫu ứng xử
[behavioral patterns]
- Chain of responsibility
- Command
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template method
- Visitor
Dĩ nhiên danh sách trên là chưa đầy đủ, nhưng ở bài viết này, mình sẽ chỉ giới thiệu về các pattern được ứng dụng nhiều trong PHP cũng như các ngôn ngữ OOP khác.
Factory Pattern
Mẫu này được chia làm 2 loại là Factory Method và Abtract Factory. Vậy sự khác nhau giữa 2 pattern này là gì ? Hãy cùng tìm hiểu qua 2 ví dụ để tìm ra sự khác biệt.
1. Factory method
Định nghĩa
Bản chất của mẫu thiết kế Factory là
"Định nghĩa một giao diện [interface] cho việc tạo một đối tượng, nhưng để các lớp con quyết định lớp nào sẽ được tạo. "Factory method" giao việc khởi tạo một đối tượng cụ thể cho lớp con."
Gỉa sử, chúng ta xây dựng 1 "nhà máy" [factory] để "sản xuất" ra các hình vẽ khác nhau, hãy xem mô hình UML dưới đây.
Có hiểu đơn giản, chúng ta có 1 nhà máy [ở đây là ShapeFactory], và cần nhà máy này sản xuất ra các hình vẽ theo yêu cầu, mà không cần quan nó sẽ dùng tâm phương pháp hay cách thức nào để tạo ra hình vẽ đó. Đây cũng chính là mục đích của việc sử dụng Factory Method.
Cách thực hiện
Vậy để triển khai mẫu Factory Method phải làm như thế nào ?
- Đầu tiên chúng ta cần tạo ra 1 interface[hoặc abstract class] ở đây tôi đặt tên là
Shape
, trong đó có phương thứcdraw[]
đây là phương thức để vẽ các hình. - Tiếp theo là tạo ra các subclass, ví dụ tạo class
Circle
kế thừa class/ hoặc implements interfaceShape
, class này sẽ override lại phương thứcdraw[]
củaShape
đã tạo để vẽ ra hình tròn. - Tiếp theo chúng ta tạo class
Square
cũng kế thừaShape
, class này sẽ định nghĩa lại phương thứcdraw[]
để vẽ ra hình vuông. - Tương tự với class Rectangle để tạo ra hình chữ nhật.
- Và quan trọng nhất là thực hiện Factory Method bằng cách tạo ra class
ShapeFactory
, tôi sẽ nói rõ hơn ở phần dưới đây.
Ví dụ
Trước hết chúng ta tạo file Shape.php với nội dung như sau