【发布时间】:2019-04-08 14:41:49
【问题描述】:
所以如果我有一个接口iConnection
interface iConnection
{
}
实施者:
class OutlookConnection implements iConnection
{
}
和
class GoogleConnection implements iConnection
{
}
还有一个接口iComparison
interface iComparison
{
}
实施者:
class OutlookComparison implements iComparison
{
private $connection;
public function __construct($user, iConnection $iConnection) {
$this->connection = $iConnection;
}
}
和
class GoogleComparison implements iComparison
{
private $connection;
public function __construct($user, iConnection $iConnection) {
$this->connection = $iConnection;
}
}
在主程序中,我希望能够基于 iConnection 类型在 GoogleComparison 和 OutlookComparison 之间切换,而无需使用 if 或 switch 语句:
public function __construct(iConnection $connection)
{
$this->connect = $connection;
if($this->connection instanceof GoogleConnection){
$this->comparison = new GoogleComparison();
}
elseif($this->connection instanceof OutlookConnection){
$this->comparison = new OutlookComparison();
}
}
这是否可以在这个构造函数中实现而无需 switch 或 if 语句?
【问题讨论】:
-
你不能让连接实例负责提供比较吗?
$connection->getComparison()怎么样? -
啊,是的,谢谢。如果您将其发布为答案,我会接受。
标签: php oop design-patterns interface solid-principles