07/09/2018, 10:49

Tìm Hiểu Về Factory Design Pattern Trong PHP

Trong số những kiểu mẫu thiết kế hay design pattern trong PHP thì Factory là một trong những pattern được sử dụng phổ biến nhất. Trong tiếng anh Factory có nghĩa là nhà máy , nhà xưởng và đây là pattern được thiết kế để xử lý việc tạo object mới. Hãy xem Factory pattern được sử dụng như thế nào ...

Trong số những kiểu mẫu thiết kế hay design pattern trong PHP thì Factory là một trong những pattern được sử dụng phổ biến nhất. Trong tiếng anh Factory có nghĩa là nhà máy , nhà xưởng và đây là pattern được thiết kế để xử lý việc tạo object mới. Hãy xem Factory pattern được sử dụng như thế nào trong một ví dụ sau:

class XMLParser {
    function __construct($filePath) {
        file_get_content($filePath);
        // ...
    }
}

class JSONParser {
    function __construct($filePath) {
        file_get_content($filePath);
        // ...
    }
}

abstract class ParserFactory {
    public static function __construct($param) {
         if ($param['type'] = 'XML') {
                return new XMLParser($param["filePath"]);
        }
        if ($param['type'] = 'JSON') {
                return new JSONParser($param["filePath"]);
        }
    }
}

Ở trên đây chúng ta có hai class là XMLParser và JSONParser dùng để parse nội dung của tập tin tuỳ thuộc vào tập tin được lưu dưới định dạng là XML hay JSON. Tuy nhiên thay vì tạo parser object trực tiếp từ hai class này mà thông qua một Factory class FactoryParser.

Tại sao phải sử dụng FactoryParser? Có thể bạn sẽ thấy việc tạo class Factory như ở trên để xử lý việc tạo object là thừa và thậm chỉ khiến tăng số lượng dòng code không cần thiết. Phải thừa nhận rằng với ví dụ đơn giản trên thì FactoryParser không mang lại nhiều lợi ích. Tuy nhiên đối với các ứng dụng lớn thì việc tạo object thông qua Factor sẽ có rất nhiếu điểm lợi. Ví dụ như nếu bạn thay đổi tên của class XMLParser tất cả những gì bạn cần làm đó là thay đổi một dòng code trong method __construct() của ParserFactory. Nếu như bạn không sử dụng Factory bạn sẽ phải thay đổi ở tất cả các object được tạo từ class XMLParser. Điều này thật không dễ dàng chút nào!

0