Hướng đối tượng trong PHP: Factory Pattern

  • PHP and Mysql
  • 16 tháng 08 2012
  • bởi Văn Khương
  • 0 Comments

Một mẫu thiết kế phổ biến khác là mẫu factory. Mục đích chính của mẫu này là cung cấp một đối tượng bằng cách ẩn đi những sự phức tạp đằng sau nó, điều này có nghĩa là chúng ta có một số lớp phức tạp nào đó mà được sử dụng theo từng ngữ cãnh cụ thể chúng có thể có một số chức năng, thuộc tính thống nhất theo một mô hình nào đó, có thể là một số lớp cấu trúc từ một lớp abstract chẵng hạn, chúng ta sẽ kết hợp chúng lại để xử lý trong một lớp, mà ở đó mọi công việc xử lý được diễn ra và chỉ trả về những cái cần thiết, điều này giúp mô hình chặt chẽ và giễ dàng để sử dụng bởi vì tất cả những gì phức tạp đã được thực hiện trong lớp. Xem ví dụ sau để hiểu rõ điều này:

abstract class Capp{
    abstract function cMethod();
}
class Capp1 extends Capp{
    public function cMethod(){
        return 'Ban da goi '.__METHOD__;
    }
}
class Capp2 extends Capp{
    public function cMethod(){
        return 'Ban da goi '.__METHOD__;
    }
}
class CManager{
    const C1 = 1;
    const C2 = 2;
    private $mode;
    function __construct($mode=1){
        $this->mode = $mode;
    }
    public function getCapp(){
        switch($this->mode){
            case (CManager::C1):
                return new Capp1();
            case (CManager::C2):
                return new Capp2();
        }
    }
}
$s = new CManager(CManager::C1);
$Capp = $s->getCapp();
echo $Capp->cMethod();

Đây là ví dụ vệ việc sử dụng mẫu factory trong việc tạo ra đối tượng cụ thể trong một mô hình có một số lớp kế thừa từ lớp abstract, từ ví dụ trên ta thấy 2 lớp Capp1 Capp2 có lớp abstract Capp, điều quan trọng ở đây là chúng được khởi tạo đối tượng thông qua lớp CManager điều này rất có lợi cho bạn khi bạn có một hệ thống với số lượng lớp đồ sộ, như trên nếu muốn sử dụng lớp nào thì ta chỉ việc khởi tạo đối tượng từ lớp CManager cùng với khai báo tham số là hằng số tương ứng cho lớp mà bạn cần gọi.

Tham khảo "Object-Oriented Programming with PHP5 - Hasin Hayder,  PHP Objects, Patterns and Practice -  Matt Zandstra"

  • Chia sẻ
comments powered by Disqus