模式定义
与简单工厂类似,该模式用于创建一组相关或依赖的对象,不同之处在于静态工厂模式使用一个静态方法来创建所有类型的对象,该静态方法通常是 factory 或 build。
代码示例
创建静态工厂,以后调用都用到这个静态工厂
class StaticFactory
{
public static function factory($type)
{
//通过传过来的类名,实现实例化
$className = __NAMESPACE__ . '\\' . ucfirst($type);
if (!class_exists($className)) {
throw new \InvalidArgumentException('Missing format class.');
}
return new $className();
}
}
创建格式化接口,所有产品都根据这里规则来实例
/**生产猫的接口
* Interface FormatCatInterface
* @package app\lib\StaticFactory
*/
interface FormatCatInterface
{
/**生产手
* @return mixed
*/
public static function createHand();
}
具体产品
/**家猫 类
* Class CatDomestic
* @package app\lib\StaticFactory
*/
class CatDomestic implements FormatCatInterface
{
public static function createHand()
{
return '生产家猫的手';
}
}
/**波斯猫 类,可以生产他的手脚毛等...
* Class CatPersian
* @package app\lib\StaticFactory
*/
class CatPersian implements FormatCatInterface
{
public static function createHand()
{
return '生产波斯猫的手';
}
}
控制器调用
//生产家猫的手
echo StaticFactory::factory("CatDomestic")->createHand();