配接器模式的定義:
將一個類的介面轉換成客戶希望的另外一個介面,Adapter模式使得原來由于介面不兼容而不能一起作業的那此類可以一起作業
包括兩種模式:
類配接器模式與物件配接器
類配接器:Adapter類與被適配類是繼承關系
物件配接器:Adapter物件與被適配類物件是委托關系 , 委托關系就是通過建構式或者方法傳入被適配物件
PDOAdapter 繼承 PDO類 , 擴展里面的方法 , 這就是類配接器模式
ArticleModel傳入PDOAdapter 物件 , 擴展PDOAdapter 物件的方法 , 這就是物件配接器
<?php //類配接器 class PDOAdapter extends PDO{ private $dsn = null; private $username = null; private $password = null; private $timeout = 30; private $charset = "utf8"; private $options = array( PDO::ATTR_AUTOCOMMIT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ); public function __construct($dsn, $username, $password, $timeout = null){ $this->dsn = $dsn; $this->username = $username; $this->password = $password; $this->timeout = intval($timeout); parent::__construct($dsn, $username, $password, $this->options); $this->exec("set names ".$this->charset); } public function execute($sql, $params = array()){ $stmt = $this->prepare($sql); $execStatus=$stmt->execute($params); return $execStatus; } public function getAll($sql, $params = array()){ $stmt = $this->prepare($sql); $stmt->execute($params); return $stmt->fetchAll(); } } //物件配接器,使用委派 class ArticleModel{ private $pdo=null; public function __construct($pdo){ $this->pdo=$pdo; } //委派呼叫PDOAdapter的getAll方法 public function getArticleList(){ $res=$this->pdo->getAll("select * from countries"); return $res; } } class Controller{ public function doAction(){ try { $pdo=new PDOAdapter("mysql:host=127.0.0.1;port=3306;dbname=phpfly","phpfly","phpfly"); $model=new ArticleModel($pdo); $res=$model->getArticleList(); var_dump($res); } catch (Exception $e) { var_dump($e->getMessage()); } } } $c=new Controller(); $c->doAction();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270619.html
標籤:PHP
