1. 程式人生 > >Yii 中使用了哪些設計模式?

Yii 中使用了哪些設計模式?

單例模式

public function set($class, $definition = [], array $params = [])
{
    // 規範化 $definition 並寫入 $_definitions[$class]
    $this->_definitions[$class] = $this->normalizeDefinition($class, $definition);

    // 將建構函式引數寫入 $_params[$class]
    $this->_params[$class] = $params;

    // 刪除$_singletons[$class]
    unset($this->_singletons[$class]);
    return $this;
}

public function setSingleton($class, $definition = [], array $params = [])
{
    // 規範化 $definition 並寫入 $_definitions[$class]
    $this->_definitions[$class] = $this->normalizeDefinition($class, $definition);

    // 將建構函式引數寫入 $_params[$class]
    $this->_params[$class] = $params;

    // 將$_singleton[$class]置為null,表示還未例項化
    $this->_singletons[$class] = null;
    return $this;
}

抽象工廠模式(Abstract Factory)

工廠方法模式(Factory Method)

迭代器模式(Iterator)

class SessionIterator implements \Iterator

MVC模式

MVC是三個單詞的縮寫:Model, View, Controller。 MVC是一種設計模式,目前幾乎所有的Web開發框架都建立在MVC模式之上。

依賴注入(Dependency Injection)模式

http://www.yiichina.com/tutorial/112

介面卡模式(Adapter)

介面卡模式的優點既沒有修改原來的類,又擴充套件了原來的類, 複用了現存的類,解決了現存類和複用環境要求不一致的問題。

建造者模式(Builder)

建造者模式也稱生成器模式,核心思想是將一個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示。

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../../common/config/main.php'),
    require(__DIR__ . '/../../common/config/main-local.php'),
    require(__DIR__ . '/../config/main.php'),
    require(__DIR__ . '/../config/main-local.php')
);

$application = new yii\web\Application($config);
$application->run();

yii\web\Application 類使用了建造者模式,我們不用逐一去配置應用程式的每個配置項,通過yii\helpers\ArrayHelper::merge將所有的配置項合併到一起統一配置。

組合模式(Composite)

裝飾模式(Decorator)

代理模式(Proxy)

外觀模式(Facade)

觀察者模式(Observer)

狀態模式(State)

模板方法模式(Template Method)

策略模式(Strategy)

享元模式(Flyweight)

Yii2 中高階版本(Advanced)有三個入口(frontend, backend, console),三個入口的應用程式類(Application)都繼承同一個yii\base\Application類,這樣它們共享同一個 common 目錄。

 

參考文獻:

https://www.yiichina.com/topic/6840