【发布时间】:2019-05-02 14:01:14
【问题描述】:
我正在寻找以下场景中的最佳实践(使用 Laravel,但这不相关):我有一个方法 strokePet,它取决于请求的有效负载,将实例化 DogStroker 或 CatStroker班级。 strokePet 方法通过 API 端点调用。
class PetController
{
public function strokePet($request)
{
if ($request->pet == 'dog') {
$stroker = new DogStroker;
else if ($request->pet == 'cat') {
$stroker = new CatStroker;
}
$stroker->stroke();
}
}
class DogStroker
{
public function stroke()
{
echo 'grr';
}
}
class CatStroker
{
public function stroke()
{
echo 'prr';
}
}
创建PetStroker接口有什么好处吗,例如
interface PetStroker
{
public function stroke();
}
或者是否有一些我在这里遗漏的设计模式会使这更符合 OOP 的习惯? (我知道这可能会因为过于模糊而被标记。)
【问题讨论】:
-
拥有一个接口(或父类,甚至可以是抽象的)有助于在您开始添加功能后保持代码整洁(因为您可以执行诸如 $x instanceof PetStroker 之类的操作)。至于设计模式:我建议在工厂模式中实现它,例如。创建提到的抽象类 PetStroker 并给它一个静态方法
PetStroker::Create($pet),它可以返回 CatStroker 或 DogStroker 或任何你想要的。
标签: php oop design-patterns