DANH MỤC: DESIGN PATTERNS

Bài 2: Creational-Abstract factory pattern trong PHP


bài trước chúng ta đã được tìm hiểu về khái niệm, ưu điểm và các loại design patterns, nhưng nó chỉ ở mức độ khái quát mà chưa đi sâu vào hẳn từng mẫu. Thì ở bài này và các bài sau nữa mình sẽ đi sâu vào giới thiệu và tìm hiểu từng mẫu thiết kế đó.

Bài này chúng ta sẽ giải quyết Abstract Factory patterns.

1, Tổng quan?

 -Abstract Factory cung cấp một đối tượng bằng cách ẩn đi những sự phức tạp đằng sau nó, 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 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à dễ dàng để sử dụng.

-Trong các framework mới hiện nay như: Laravel, Symfony, Cake,... đều có sử dụng loại pattern này.

2, Ví dụ.

-Ví dụ chúng ta có một abstract factory pattern như sau:

<?php
abstract class AbstractFactory
{
    abstract public function createText($mode, $content);
}

class Factory extends AbstractFactory
{
    public function createText($mode, $content)
    {
        switch (strtolower($mode)) {
            case 'htmltext':
                return new HtmlText($content);
                break;
            case 'jsontext':
                return new JsonText($content);
                break;
            default:
                return ;
                break;
        }
    }
}
abstract class Text
{
    private $text;
    public function __construct($string)
    {
        $this->text = $string;
    }
    public function getText()
    {
        return $this->text;
    }
}

class HtmlText extends Text
{
    //code
}

class JsonText extends Text
{
    //code
}

//Khởi tạo lớp Factory
$fatory = new Factory();

$html = $fatory->createText('htmltext','HTML');

echo $html->getText(); //HTML

$json = $fatory->createText('jsontext','JSON');

echo $json->getText(); //JSON

-Từ ví dụ trên ta thấy 2 lớp HtmlText JsonText có lớp abstract Text và lớp Factory có lớp abstract AbstractFactory, nhưng điều quan trọng ở đây là 2 lớp HtmlText và JsonText đều được khởi tạo đối tượng thông qua lớp Factory điều này rất có lợi khi hệ thống của chúng ta nhiều lớp, 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 Factory cùng với khai báo thêm nhánh case cho lớp mà chúng ta cần gọi.

3, Lời kết.

-Như vậy mình đã giới thiệu xong đến mọi người về abstract factory pattern rồi. Về phần series này nó sẽ rất trừu tượng nên để hiểu rõ được thì các bạn cần phải nắm chắc được các kiến thức về OOP.

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

The best way to learn is to share

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia