Hướng dẫn design pattern php
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ọ. Show 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 patternTham khảo từ wikipedia Các mẫu tạo lập(creational patterns)
Các mẫu cấu trúc(structural patterns)
Các mẫu ứng xử(behavioral patterns)
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 PatternMẫ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ĩaBản chất của mẫu thiết kế Factory là
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ệnVậy để triển khai mẫu Factory Method phải làm như thế nào ?
Ví dụTrước hết chúng ta tạo file Shape.php với nội dung như sau
Tiếp theo là tạo 3 class implements interface
Cuối cùng để thực hiện Factory Method, chúng ta tạo ra lớp ShapeFactory như dưới đây. Class này sẽ tạo ra các đối tượng cụ thể tại thời điểm thực thi (at run time)
Và cuối cùng, chúng ta sẽ tạo ra các đối tượng cụ thể, hay các hình vẽ như sau.
=> in ra màn hình Tương tự, vẽ các hình khác chỉ cần thay đổi giá trị của $type trong Như vậy chúng ta ó thể thấy rõ ràng là chúng ta không cần biết phương thức 2. Abstract Factory PatternĐịnh nghĩaLà thiết kế mẫu hướng đối tượng trong việc thiết kế phần mềm, cung cấp một giao diện lớp có chức năng tạo ra một tập hợp các đối tượng liên quan hoặc phụ thuộc lẫn nhau mà không chỉ ra đó là những lớp cụ thể nào tại thời điểm thiết kế.[1] Mẫu thiết kế Abstract Factory đóng gói một nhóm những lớp đóng vai trò "sản xuất" (Factory) trong ứng dụng, đây là những lớp được dùng để tạo lập các đối tượng. Các lớp sản xuất này có chung một giao diện lập trình được kế thừa từ một lớp cha thuần ảo gọi là "lớp sản xuất ảo". Có thể hiểu đơn giản Abstract Factory như 1 siêu nhà máy dùng để tạo ra các nhà máy (factory) khác. Cấu trúc
Ví dụSơ đồ UML mô tả 1 dạng Abstract Factory Như chúng ta thấy, khác với Factory Method, ở hình vẽ có thêm 1 lớp Producer, vai trò tương tự với lớp Factory ở phần 1. Có thể nói đây là 1 mô hình mở rộng của pattern Factory Method. Bước 1 Tạo interface Shape (được hiểu là 1
Bước 2 Tạo các class cụ thể implements cùng 1 interface
Bước 3 Tạo interface Color (1
Bước 4 Tương tự bước 2, tạo các class và implements cùng 1 interface
Bước 5 Tạo ra 1 lớp Abstract với phương thức giáo tiếp đến thao tác khởi tạo các Shape và Color object - đây chính là khái niệm
Bước 6 Tạo lớp Factory kế
thừa AbstractFactory để thực hiện generate ra các object cụ thể dựa trên các thông tin được đưa ra. Các lớp này còn được gọi là Shape Factory
Color Factory
Bước 7 Tạo FactoryProducer để khởi tạo 1 abstract Shape/Color Factory
Bước 8 Như vậy là đã gần đầy đủ 1 mô hình AbstractFactory, chúng ta chỉ cần phần Tạo 1 file php bất kì để test thôi
Bước 9 Cùng xem output |