您好,登錄后才能下訂單哦!
我們可能會遇到這種情況,為了實現一些業務邏輯,我們會對同一個對象來回重建進行業務處理
比如說做試卷,老師除了一套試卷,學生們拿到試卷只有兩個地方不一樣,填寫的答案和名字
這樣的話,整體的算法骨架是一定的,你只需要固定出來一套題就可以,子類去修改其中一兩部
應用情境:數據庫中間層的抽象類
上代碼
<?php //模板設計模式創建了一個實施一組方法的抽象對象,子類通常將這個對象作為模板用于自己的設計。 //一般會用于數據庫抽象類。 abstract class dbbaseInit{ /** * 抽象數據庫鏈接 * @param string $host sql服務器 * @param string $user 數據庫用戶名 * @param string $password 數據庫登錄密碼 * @param string $database 數據庫 * @param string $charset 編碼 * @param string $pconnect 是否持久鏈接 */ abstract protected function connect($host,$user,$password,$database,$charset='utf-8',$pconnect=0); /** * 抽象數據庫執行語句 * @param string $sql SQL語句 * @return obj */ abstract protected function query($sql); /** * 抽象數據庫-結果集中的行數 * @param $result 結果集 * @return array */ abstract protected function result($result,$num=1); /** * 抽象數據庫-從結果集中取得一行作為關聯數組 * @param $result 結果集 * @return array */ //這個方法沒用過(不是數字索引而是字段) abstract protected function fetch_assoc($result); /** * 抽象數據庫-從結果集中取得列信息并作為對象返回 * @param $result 結果集 * @return array */ abstract protected function fetch_fields($result); /** * 抽象數據庫-前一次操作影響的記錄數 * @return int */ //這個也沒有用過 abstract protected function affected_rows(); /** * 抽象數據庫-結果集中的行數 * @param $result 結果集 * @return int */ abstract protected function num_rows($result); /** * 抽象數據庫-結果集中的字段數量 * @param $result 結果集 * @return int */ abstract protected function num_fields($result); /** * 抽象數據庫-獲取上一INSERT的ID值 * @return Int */ abstract protected function insert_id(); /** * 抽象數據庫-釋放結果內存 * @param obj $result 需要釋放的對象 */ abstract protected function free_result($result); /** * 抽象數據庫鏈接關閉 * @param string $sql SQL語句 * @return obj */ abstract protected function close(); /** * 錯誤信息 * @return string */ abstract protected function error(); } //這是具體的某個數據庫,比如MySQL,oracle class mysqliInit extends dbbaseInit{ public $link_id; //重寫模型中的連接類 public function connect($host,$user,$password,$database,$charset='utf8',pconnect=0){ $link_id = ($pconnect==0)?mysqli_connect($host,$user,$password):mysqli_pconnect($host,$user,$password); if(!$link_id) die('mysql connect error!'); mysql_query($link_id,'set names'.$charset); if(!mysqli_select_db($link_id,$database)) die('database is not exist'); return $link_id; } public function query($sql){ return mysqli_query($this->link_id,$sql); } public function result($result,$num=1){ return mysqli_result($result,$num); } public function fetch_assoc($result){ return mysqli_fetch_assoc($result); } public function fetch_fields($result){ return mysqli_num_fields($result); } public function free_result($result){ return mysqli_free_result($result); } public function insert_id(){ return mysqli_insert_id($this->link_id); } public function affected_rows() { return mysqli_affected_rows($this->link_id); } public function close(){ if($this->link_id!==null) $mysqli_close($this->link_id); $this->link_id = null; return true; } public function error(){ return mysqli_error($this->link_id); } } ?>
有點累了,設計模式常用的先學到這里,后續的以后再說,
愿法界眾生,皆得安樂
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。