1. 程式人生 > 實用技巧 >php 設計模式之 介面卡模式

php 設計模式之 介面卡模式



1. 介面卡模式

將一個類的介面轉換成客戶希望的另外一個介面。Adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作


2. 實列

class Message {
    public function send() {
        echo "ali傳送簡訊" . PHP_EOL;
    }
    public function push(){
        echo "ali傳送推送" . PHP_EOL;
    }
}

class JiguangSDKAdapter extends Message{
    private $message;

    public function __construct($message){
        $this->message = $message;
    }

    public function send(){
        $this->message->send_out_msg();
    }
    public function push(){
        $this->message->push_msg();
    }
}

class JiguangMessage{
    public function send_out_msg(){
        echo "極光傳送簡訊!" . PHP_EOL;
    }
    public function push_msg(){
        echo "極光傳送推送!" . PHP_EOL;
    }
}
class BaiduYunSDKAdapter extends Message{
    private $message;

    public function __construct($message){
        $this->message = $message;
    }

    public function send(){
        $this->message->transmission_msg();
    }
    public function push(){
        $this->message->transmission_push();
    }
}
class BaiduYunMessage{
    public function transmission_msg(){
        echo "百度雲傳送簡訊!" . PHP_EOL;
    }
    public function transmission_push(){
        echo "百度雲傳送推送!" . PHP_EOL;
    }
}

$jiguangMessage = new JiguangMessage();
$baiduYunMessage = new BaiduYunMessage();
$message = new Message();

// 原來的老系統發簡訊,使用阿里雲
$message->send();
$message->push();


// 部分模組用極光發吧
$jgAdatper = new JiguangSDKAdapter($jiguangMessage);
$jgAdatper->send();
$jgAdatper->push();

// 部分模組用百度雲發吧
$bdAatper = new BaiduYunSDKAdapter($baiduYunMessage);
$bdAatper->send();
$bdAatper->push();

3. 使用場景

  1. laravel 檔案系統模組 FilesystemAdapter 類,使用的介面卡模式