我想知道是否有人可以帮助我。
我正在研究战略模式,但我遇到了一些问题。
作为一个例子,我将描述一个数据库备份方案。
首先我创建一个界面
interface DatabaseBackup {
public function getConnection()
}
然后我创建我将使用的策略
class DatabaseBackupStrategy {
private $strategy = NULL;
public function __construct($service) {
switch ($service) {
case "mysql":
$this->strategy = new MYSQLBackup();
break;
case "mssql":
$this->strategy = new MSSQLBackup();
break;
}
}
public function getConnection()
{
return $this->strategy->testConnection();
}
}
接下来的实施
class MYSQLBackup implements DatabaseBackup {
public function getConnection() {
\\ Code here
}
}
class MSSQLBackup implements DatabaseBackup {
public function getConnection() {
\\ Code here
}
}
最后,称之为
$service = new DatabaseBackupStrategy($service);
$service->getConnection();
以上是我对其运作方式的理解。
但是,如果我想在MYSQLBackup或MSSQLBackup类中实现方法,我也必须在DatbaseBackupStrategy类中定义它。
这是最好的方式吗?
我觉得我要加倍代码必须首先在界面中定义方法,然后是策略,最后在实现中。