除了使用 new 操作符之外,還有更多的製造對象的方法。你將瞭解到實例化這個活動不應該總是公開進行,也會認識到初始化經常造成“耦合”問題。 ...
除了使用 new 操作符之外,還有更多的製造對象的方法。你將瞭解到實例化這個活動不應該總是公開進行,也會認識到初始化經常造成“耦合”問題。
應用舉例
yii\db\mysql\Schema中:
//創建 QueryBuilder 實例
public function createQueryBuilder()
{
return new QueryBuilder($this->db);
}
這裡使用了簡單工廠模式。
簡單工廠
簡單工廠(Simply Factory)可以作為 new 關鍵詞的一種簡單代替。簡單工廠其實不是一個設計模式,反而比較像是一種變成習慣。由於經常被使用,所以很多人依然把它稱為“模式”。很多人確實把這個變成習慣誤認為是“工廠模式”。但是,不能認為簡單工廠不是一個真正的“模式”,就忽略它的用法。
代碼實現
//簡單工廠
class SimpleFactory
{
public function createBicycle(): Bicycle
{
return new Bicycle();
}
}
//所要創建的對象
class Bicycle
{
public function driveTo(string $destination)
{
}
}
//使用
$bicycle = (new SimpleFactory())->createBicycle();
SimpleFactory 還可以擁有別的方法,每個方法還可以擁有參數,以創建不同的對象。
簡單工廠封裝創建對象的代碼,有了 SimpleFactory 之後,如果我們需要 Bicycle 實例,就讓 SimpleFactory 去給我創建一個,而不必自己再 new 一個。在需要多個對象的場合,使用一個工廠確實比一大堆 new 操作具有優越性。
Yii2中的簡單工廠
簡單工廠作為一種變成“習慣”,Yii2中有大量的應用,因為識別簡單、用法簡單,這裡就不再多舉例了。