2016年8月18日 星期四

php Interface 簡單了解

        在設計一個系統時,低耦合是其中一個目標,當需求出現,對之前已運行很穩定的程式碼變動越少越好,低耦合意味著能夠在這樣的前提之下,也能相對容易得去擴充新功能。

        PHP的interface是一個很不錯的低耦合考慮因素。

        情況:需要寫一個會員紅利產生判斷

        一開始先設好MemberCoin的interface,然後令大家都會用到的function,但是這裡有任何實作,感覺有點像是我來訂一個標準,每個有implements我的都統一用這個function實作吧!


interface MemberCoin
{
        public function schedule($who);
}

        接著需要編寫各種活動:


class Sales implements MemberCoin    //銷售單
{
        public function schedule($who)
        {
               // do something..
               $result = ($who=="Vip")? 300:200;
               return $result;
        }
}

class Birthday implements MemberCoin   //生日

        public function schedule($who)
        {
                 $result = ($who=="Vip")? 200:100; 
                  return $result; 
         }
}


        接著要寫個接口:


class UserController
{
        public function __construct(MemberCoin $membercoin)
        {
                $this->membercoin = $membercoin;
        }

        public function showResult($who)
        {
                echo $this->membercoin->schedule($who);
        }
}

        使用的重點就在紅字粗體的地方,這裡調動的不是任何一個特定的活動,而是我們一開始設定好的interface,所以不管我們之後怎麼變動活動的內容,接口端完全不用任何變動,因為它只負責執行而已。

        現在把他實作出來:

//  調用銷貨單class
$class_sales = new Sales;

// 讓接口端知道我們要調用銷貨單class
$class_usercontroller = new UserController($class_sales);   

// 接口端用銷貨單class執行結果
echo $class_usercontroller->showResult("Vip");  

        簡單寫就是:

echo (new UserController(new Sales))->showResult("Vip");

        結果:

300

沒有留言:

張貼留言