標籤:class 方法 簡單工廠 用戶端 else 服務 sql 實現 個數
最近一直很迷惑,設計模式到底是幹嘛的,有什麼用呢!所以專門花時間學習並整理了設計模式的好處等等!那今天先給大家一起分享下我所理解的設計模式--原廠模式!
- 先說說優點:
- 減少了工作量
方便擴充維護
- 再說說其實現方式:
給2個類大家好好看一下,理解一下其內容:
在這個類裡,如果使用者需要再添加一個資料庫聯結,比如oracle,是否需要修改Factory裡的createDb的內容,這樣的話,php還好,但如果在C/JAVA裡,修改編譯是
需要很長時間的,所以這種方法對於開發的話,還是不太容易擴充。
<?php /*** 簡單原廠模式*/ //共同介面interface db{ function conn();}//伺服器端開發(不知道會被誰調用)class dbmysql implements db{ public function conn(){ echo "mysql"; }}class dbsqlite implements db{ public function conn(){ echo "sqlite"; }}class Factory{ public static function createDB( $type ){ if($type == ‘mysql‘){ return new dbmysql(); }else if( $type == ‘sqllite‘ ){ return new dbsqlite(); }else{ throw new Exception("錯誤的資料庫連接",1); } }}//用戶端 首先看不到dbmysql和dbsqlite $mysql = Factory::createDB("mysql");$mysql->conn();
我們再來看看真正的原廠模式,大家可以看看“//伺服器端添加oracle類===”這下面的內容,添加了一個oracel串連,只是增加了兩個擴充,這樣代碼更容易擴充和維護。
<?php /*** 原廠模式*/ //共同介面interface db{ function conn();}interface Factory{ function createDB();}//伺服器端開發(不知道會被誰調用)class dbmysql implements db{ public function conn(){ echo "mysql"; }}class dbsqlite implements db{ public function conn(){ echo "sqlite"; }}class mysqlFactory implements Factory{ public function createDB(){ return new dbmysql(); }}class sqliteFactory implements Factory{ public function createDB(){ return new dbsqlite(); }}//伺服器端添加oracle類===//前面的代碼不用動class dboracle implements db{ public function conn(){ echo "oracle"; }}class oracleFactory implements Factory{ public function createDB(){ return new dboracle(); }}//用戶端 首先看不到dbmysql和dbsqlite $fact = new oracleFactory();$db = $fact->createDB();$db->conn();
php設計模式之原廠模式