TungNT (Blue)

tungnt.blue@gmail.com

User Tools

Site Tools


development:software-architecture:design-patterns:factory

This is an old revision of the document!


Factory

Hãy tưởng tượng rằng bạn đang tạo một ứng dụng quản lý hậu cần. Phiên bản đầu tiên của ứng dụng của bạn chỉ có thể xử lý vận chuyển bằng xe tải, vì vậy phần lớn mã của bạn nằm trong lớp Truck.

Sau một thời gian, ứng dụng của bạn trở nên khá phổ biến. Mỗi ngày, bạn nhận được hàng chục yêu cầu từ các công ty vận tải biển để tích hợp hậu cần đường biển vào ứng dụng.

Tin tuyệt vời, phải không? Nhưng còn mã thì sao? Hiện tại, hầu hết mã của bạn được ghép nối với lớp Truck. Việc thêm Ships vào ứng dụng sẽ yêu cầu phải thay đổi toàn bộ cơ sở mã. Hơn nữa, nếu sau này bạn quyết định thêm một loại phương tiện giao thông khác vào ứng dụng, có thể bạn sẽ cần phải thực hiện lại tất cả những thay đổi này.

Kết quả là, bạn sẽ có một mã khá khó chịu, chứa đầy các điều kiện chuyển đổi hành vi của ứng dụng tùy thuộc vào lớp đối tượng phương tiện giao thông.

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.

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 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 ParserFactory.

Như ví dụ trên nếu chúng ta thay đổi tên của class XMLParser thì chúng ta chỉ cần thay đổi một dòng code trong method construct của ParserFactory. Nếu như chúng ta không sử dụng Factory thì sẽ phải thay đổi ở tất cả các object được tạo từ class XMLParser.

Tham khảo

development/software-architecture/design-patterns/factory.1723092458.txt.gz · Last modified: 2024/08/08 04:47 by tungnt

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki