我有一个Model
可以跨不同的控制器或类创建。这方面的一个示例是AController
使用ModelController
中的相同逻辑创建模型可能需要的方案。因此,有关创建此模型的一些事实是:
(new Model($params))->save()
这是否需要ModelFactory
或是否可以复制代码?我该怎么做?
我知道这需要某种抽象;但究竟是哪个?
我有一个Car
模型和一个Driver
模型,它们分别具有控制器和创建操作。但是,在RaceController#actionRegistration
中,可以创建Car
和Driver
。创建两个模型所需的过程不是vanilla Car#create()
。 RaceController#actionRegister()
中的创建过程是否需要我使用工厂模式?注意:我无法从RaceController#actionRegister()
重定向到其他创建操作。我想在这里创建两个模型。
答案 0 :(得分:1)
这回答了你的问题:我该怎么做?
在Factory模式中,简单工厂通常是静态声明的(如Larry Ullman的书中所述),但在Factory Method模式中,factoryMethod()方法被声明为可以被覆盖的抽象方法。原因是灵活性。
您的客户(即protected / views / products / index.php )
<?php
include("../models/Pizza.php");
include("../models/PizzaEurope.php");
include("../models/PizzaItaly.php");
include("Order.php");
include("FactoryPizza.php");
$order = new Order();
$order->orderPizza('PizzaEurope');
在您的控制器中:
<?php
class OrderController extends Controller {
private $_pizza;
public function orderPizza($type) {
$pizza = new FactoryPizza();
$this->_pizza = $pizza->create($type);
echo $this->_pizza->getTitle(). ' - ' .$this->_pizza->getCost();
}
}
在FactoryClass中:
<?php
class FactoryPizza {
public function create($type) {
switch($type) {
case 'PizzaEurope':
$pizza = new PizzaEurope();
break;
case 'PizzaItaly':
$pizza = new PizzaItaly();
break;
}
return $pizza;
}
}
这是一个简单的例子,我希望它能说明可能有用的设计模式概念。您可以找到另一个示例here