2017-05-24 49 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的方法。

你可以做同样的事情。选择最喜欢的电子表格库,并从其方法创建一个接口,创建一个扩展它的新类,然后实现您的接口。

现在,当你想切换实现时,你最喜欢的库应该提供了一个体面的数量方法签名来实现另一个版本。

相关问题