橋接模式屬於結構型模式,何為結構型模式,即結構型設計模式是從程式的結構上解決模組之間的耦合問題(低耦合)
概述:將抽象部分與它的實現部分分離,使他們都可以獨立的變化
橋接模式:
將抽象部分與它的實現部分分離,使他們都可以獨立的變
抽象與它的實現分離,即抽象類別和它的衍生類別用來實現自己的對象
橋接與適配器模式的關係(適配器模式後面講解)
橋接屬於彙總關係,兩者關聯 但不繼承
適配器屬於組合關係,適配者需要繼承源
彙總關係:A對象可以包含B對象 但B對象不是A對象的一部分
個人舉例:
1 大雁和雁群
2 手機軟體和手機品牌功能
組成關係:
鳥和翅膀的關係
namespace haibao\design\web\view\design;
use haibao\design\web\common\design\bridge\PhoneBrandNokia;
use haibao\design\web\common\design\bridge\PhoneBrandApple;
use haibao\design\web\common\design\bridge\PhoneGame;
use haibao\design\web\common\design\bridge\PhoneList;
class Bridge extends \haibao\design\web\view\Base{
protected function preRender(){
header("Content-type: text/html; charset=utf-8");
$nokia = new PhoneBrandNokia();
$nokia->setPhoneSoft(new PhoneGame('諾基亞'));
$nokia->run();
echo '
';
$nokia->setPhoneSoft(new PhoneList('諾基亞'));
$nokia->run();
echo '
';
$apple = new PhoneBrandApple();
$apple->setPhoneSoft(new PhoneGame('蘋果'));
$apple->run();
echo '
';
$apple->setPhoneSoft(new PhoneList('蘋果'));
$apple->run();
echo '
';
}
}
/**
* 手機品牌
*/
namespace haibao\design\web\common\design\bridge;
abstract class PhoneBrand{
public $phoneSoft;
public function setPhoneSoft($phoneSoft){
$this->phoneSoft = $phoneSoft;
}
public function run(){}
}
/**
* 蘋果
*/
namespace haibao\design\web\common\design\bridge;
class PhoneBrandApple extends PhoneBrand{
public function run(){
$this->phoneSoft->run();
}
}
/**
* 諾基亞
*/
namespace haibao\design\web\common\design\bridge;
class PhoneBrandNokia extends PhoneBrand{
public function run(){
$this->phoneSoft->run();
}
}
/**
* 手機遊戲
*/
namespace haibao\design\web\common\design\bridge;
class PhoneGame extends PhoneSoft{
public $name;
public function __construct($name){
$this->name = $name;
}
public function run(){
echo '運行'.$this->name.'平台手機遊戲';
}
}
/**
* 手機通訊錄
*/
namespace haibao\design\web\common\design\bridge;
class PhoneList extends PhoneSoft{
public $name;
public function __construct($name){
$this->name = $name;
}
public function run(){
echo '運行'.$this->name.'手機通訊錄';
}
}
/**
* 手機軟體
*/
namespace haibao\design\web\common\design\bridge;
abstract class PhoneSoft{
public function run(){}
}