PHP設計模式-Adapter 介面卡模式

無敵小籠包發表於2019-02-16

整理一下自己的學習Aaron Saray 寫的PHP設計模式一些demo和自己的理解。大佬看完如果發現鄙人理解有誤請立即指出,感謝拍磚,跪求鞭打

/**
 * Adapter  介面卡模式
 * -------------------------------------
 * ** 來自說明 **
 * 
 * 通過介面卡模式能夠使用新的程式碼和功能性來幫助更新原有的系統。
 * 簡單的說需要轉化一個物件的介面用於另一個物件中時,
 * 在不改變原物件的基礎上可以採用介面卡模式
 * 
 * ===================================== 
 * ** 應用場景 **
 *
 * 對於專案中比較舊的架構底層的基類做介面更改時使用 
 * 
 * -------------------------------------
 * 
 * @version ${Id}$
 * @author Shaowei Pu <542684913@QQ.cn>
 */
<?php

// 你現在是大巍施工隊分配到伊朗的挖礦工頭。

/**
 * 大巍施工隊總部
 */
class headquarters  
{
    protected $_worker;
    public function __construct($worker){
        $this->_worker = $worker;
    }
    public function getWorker(){
        if( !empty($this->_worker) ){
            return `力大無窮`.$this->_worker.`個挖礦師傅`;
        }
    }
}
/**
 * 分包出去幹活的
 */
class assignWorker
{
    protected $_workerObject;
    public function __construct(headquarters $_workerObject ){
        $this->_workerObject = $_workerObject;
    }
    public function assign(){
        echo $this->_workerObject->getWorker(); // 將錯誤資訊輸出至控制檯
    }
}

/**
 * 現在你要20個力大無窮的搬磚師傅,然後找下總部,總部就給你了
 */
$Iran   = new assignWorker(new headquarters(20));
$Iran->assign();
echo "<hr/>";

// 日復一日,年復一年,你又被調到黎巴嫩挖礦,這邊不同於你在伊朗的日子了,這裡你要挖取鑽石礦
// 但是這個鑽石礦要幾個磚家配合挖礦師傅才行,可是公司現在不能提供給你其他部門,因為我們們是百年大企業,主單位不能隨便加部門進去
// 大巍國際的人才培養很利索,要什麼有什麼,這可難不倒你。所以你想了這樣一個辦法
// 
/**
 * 黎巴嫩專用介面卡
 */
class Adapter extends headquarters
{
    public function __construct($worker){
        parent::__construct($worker);
        $this->getallheaders();
    }
    public function getallheaders(){
        $this->_worker =`勇敢過人的`.($this->_worker/2).`個磚家在加上`.$this->_worker;
    }
}
// 這下你要的的人就出來了
$Lebanon = new assignWorker(new Adapter(20));
$Lebanon->assign();


相關文章