除了使用 new 操作符之外,還有更多的製造物件的方法。你將瞭解到例項化這個活動不應該總是公開進行,也會認識到初始化經常造成“耦合”問題。
應用舉例
yiidbmysqlSchema中:
//建立 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中有大量的應用,因為識別簡單、用法簡單,這裡就不再多舉例了。