一个类和许多实现

时间:2014-04-09 20:51:26

标签: php class design-patterns

在我的应用程序中,我有一个类Database,其中包含一些方法和静态方法。我不希望这些方法每次都改变,但是它们的实现可以改变(例如,通过改变从SQL数据库到基于文件的解决方案的数据存储方式)。因此,在我的应用程序中,我总是会引用Database类,并能够选择此类的实现。

// Code to select implementation for class Database

$db = new Database();
$data = $db->load();
$db->store($data);

$db = Database::defaultDatabase();
$db->store($data);

我可以在单独的文件中创建一些具有不同实现的Database类,并根据需要包含具有所需实现的文件。但我宁愿能够从代码中选择实现。我不知道如何正确地按照良好的发展实践做到这一点。也许有些设计模式?我想到的第一件事是策略工厂方法,但在这种情况下我没有看到这些模式的用途。

1 个答案:

答案 0 :(得分:1)

目前我认为,最好的解决方案是PHP函数class_aliaslink to manual)。它按我想要的方式工作。我可以创建类TextFileDatabaseMySqlDatabase等类来实现DatabaseInterface(或者在没有实现任何接口的情况下使用相同的方法,但DatabaseInterface的解决方案对我来说更安全,因为我不必记住我应该实施哪些方法。在脚本开始时,我可以通过class_alias选择默认实现。

class_alias('TextFileDatabase', 'Database');

$db = new Database();
$data = $db->load();
$db->store($data);

$db = Database::defaultDatabase();
$db->store($data);