Chia sẻ PHP - Design Pattern - Multiton & Factory

Chia sẻ PHP - Design Pattern - Multiton & Factory

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.

Multiton

<?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');
Tags: 
Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Hãng công nghệ Tencent - WeChat chơi game bên trong ứng dụng

Hãng công nghệ Tencent - WeChat chơi game bên trong ứng dụng

Có vẻ như Snapchat vừa “mượn” một chiêu từ chiến lược của WeChat, South China Morning Post viết. Tuần này, hãng mạng xã hội có trụ sở ở Los Angeles (Mỹ) tung nền tảng Snap Games

Đã có nút +1 dành cho hình ảnh trong Google+

Đã có nút +1 dành cho hình ảnh trong Google+

Để sử dụng nút +1, bạn đăng nhập vào mạng xã hội Google+ sau đó vào album ảnh để xem một bức ảnh bất kỳ. Nhín xuống phía dưới bên trái bức ảnh bạn sẽ thấy nút +1 xuất hiện.

Firefox

Có gì mới ở Firefox 15

Thế là sao 5 tuần thử nghiệm, Firefox 15 sẽ được chính thức giới thiệu và cho tải về tại trang chủ của Firefox. Cũng như nhiều trình duyệt khác, mổi khi phiên bản chính thức mới được phát hành thì điều luôn trang bị bên mình một số các tính năng mới, khởi động và duyệt trang nhanh hơn, bên cạnh đó là khắc phục một số lỗi phát sinh từ phiên bản trước đó.

Công ty diệt chuột T&C

 

Diet con trung