2017-05-24 66 views
0

在我的控制器類我只是想只用一個電子表格類來處理所有相關電子表格創建功能,保存,加載,寫等當不同的庫創建電子表格時,使用哪種設計模式?

目前我使用一個開源庫phpspreadsheet創建電子表格,如果後來我想將其更改爲另一個電子表格創建庫,我不想在控制器類上進行太多改動,相反,我可以爲此庫創建另一個類,如Spreadsheetlib2。那麼哪種設計模式更適合在這裏使用? 「橋」還是適配器?

//橋樑模式我現在正在嘗試。

interface SpreadsheetInterface { 

    public function create(); 

    public function write(); 

} 


class Spreadsheet extends AbstractSpreadsheet { 

    public function create() { 

    } 
} 



class PhpSpreadsheet implements SpreadsheetInterface { 

    public function create() { 

    } 
} 


abstract class AbstractSpreadsheet { 

    protected $spreadsheet; 

    protected function __construct(SpreadsheetInterface $spreadsheet) { 
     $this->spreadsheet = $spreadsheet; 
    } 
} 

回答

1

我真的很關心「使用什麼樣的模式」。模式不是神奇的食譜,可以通過編寫你的代碼。它們只是「速記描述」,用來描述你已經寫過的東西,以及其他開發者。

我會這樣做的方式是創建一個包裝器(我認爲它算作「適配器」),它實現了一些特定的接口,即Controller所依賴的。在這個包裝器中,我將傳遞PhpSpreadsheet實例作爲依賴項(或直接在該包裝器中創建它的新實例)。

當你的控制器要求在包裝的方法,它調用轉發給底層的「電子表格類。

0

繼承人,這種理論用來定義一個Connection接口的小動作,而在同一時間的延長PDO。

interface Connection 
{ 
    public function prepare ($statement, array $driver_options = array()); 
} 

class PdoConnection extends \PDO implements Connection 
{ 

} 

所以,他們想確定他們可以實現基於任何DB的他們被連接到需求的接口,但他們想保持相當類似PDO的API,但是PDO未實現接口,所以他們不得不通過延伸來將它背上同時執行Connection,因此PDO無意中實施Connection的方法。

你可以做同樣的事情。選擇最喜歡的電子表格庫,並從其方法創建一個接口,創建一個擴展它的新類,然後實現您的接口。

現在,當你想切換實現時,你最喜歡的庫應該提供了一個體面的數量方法簽名來實現另一個版本。

相關問題