極簡設計模式-函式組合和集合管道模式

long2ge發表於2021-12-15

定義

    集合管道是將一些計算轉化為一系列操作,每個操作的輸出結果都是一個集合,同時該結果作為下一個操作的輸入。在函式程式設計中,通常會透過一系列更小的模組化函式或運算來對複雜運算進行排序,這種方式被稱為函式組合。

結構中包含的角色

Collection 集合物件

最小可表達程式碼 - Laravel的Collection類

class Collection 
{
    protected $items = [];

    public function __construct($items = [])
    {
        $this->items = $this->getArrayableItems($items);
    }

    public function all()
    {
        return $this->items;
    }

    public function merge($items)
    {
        return new static(array_merge($this->items, $this->getArrayableItems($items)));
    }

    public function intersect($items)
    {
        return new static(array_intersect($this->items, $this->getArrayableItems($items)));
    }

    public function diff($items)
    {
        return new static(array_diff($this->items, $this->getArrayableItems($items)));
    }

    protected function getArrayableItems($items)
    {
        if (is_array($items)) {
            return $items;
        } elseif ($items instanceof self) {
            return $items->all();
        }

        return (array) $items;
    }
}

$data = (new Collection([1,2,3]))
    ->merge([4,5])
    ->diff([5,6,7])
    ->intersect([3,4,5,6])
    ->all();

var_dump($data);

何時使用

  1. 當要執行一系列操作時。
  2. 在程式碼中使用大量語句時。
  3. 在程式碼中使用大量迴圈時。

實際應用場景

  1. Laravel的集合
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Long2Ge

相關文章