Nếu trong bài viết trước chúng ta đã khái quát hóa được khái niệm design patterns là gì thì ở bài này mình sẽ đi sâu vào giới thiệu và tìm hiểu từng mẫu design patterns nhé.

Nhân vật chính của bài viết này là Abstract Factory patterns.

Giới thiệu Abstract Factory patterns

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.

Ví dụ Abstract Factory patterns

-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 và 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.

Viết câu trả lời

Drop Images

0 Bình luận