Hướng dẫn dùng m pattern trong 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ọ.

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ức draw[] đâ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 interface Shape, class này sẽ override lại phương thức draw[] của Shape đã tạo để vẽ ra hình tròn.
  • Tiếp theo chúng ta tạo class Square cũng kế thừa Shape, class này sẽ định nghĩa lại phương thức draw[] để 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

Bài Viết Liên Quan

Chủ Đề