Khanh Hoang - Kenn
Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.
Tiếp nối chuỗi bài Design Pattern bằng ngôn ngữ PHP, hôm nay mình giới thiệu thêm 2 mẫu thiết kế cũng rất phổ biến và thông dụng, đó là mẫu Multiton và mẫu Factory.
Mẫu Multiton được mở rộng từ mẫu singleton. Nếu bạn nào để ý sẽ phát hiện ngay trong mẫu singleton phần contructor hoàn toàn không có tham số trong đó. Nhưng trong rất nhiều trường hợp, chúng ta cần khởi tạo một đối tượng với những thông số cấu hình nhất định, và cũng chính vì điều này mà multiton ra đời.
<?php class Multiton { private static $_instances = array(); private static $_key; private $_opt1; private $_opt2; protected function __construct($param1, $param2) { $this->_opt1 = $param1; $this->_opt2 = $param2; } public static function getInstance($param1, $param2) { self::$_key = $param1 . $param2; if(!self::$_instance[self::$_key] instanceof self) self::$_instance[self::$_key] = new self($param1, $param2); return self::$_instance[self::$_key]; } }
Mẫu factory nhằm giúp hạn chế những câu lệnh if...else hoặc switch ... case vốn ngốn rất nhiều resource của hệ thống. Với mẫu này. chúng ta sẽ sử dụng 1 đối tượng trung gian để khởi tạo đúng đối tượng mà không cấn thông qua các câu lệnh if...else hoặc switch...case.
Lớp đối tượng chính.
<?php class ObjMain { private static $_instance; protected function __construct(){} public static function getInstance() { if (!self::$_instance instanceof self) self::$_instance = new self(); return self::$_instance; } }
Lớp đối tượng trung gian
<?php class ObjFactory { public static function factory($className) { return $className::getInstance(); } }
Cách sử dụng
<?php $obj = ObjFactory::factory('ObjMain');
Bình luận (0)
Add Comment