<?php
declare(strict_types=1);
/**
* 工厂方法:客户发出请求时,请求不同的工厂类(不同的工厂类实现同一一个工厂接口),
* 由工厂类实例化不同的产品类(不同产品类实现同一个产品接口,并有各自的业务逻辑)
*/
interface Framework {
public function getName();
}
class ThinkPHP implements Framework
{
public function getName(): string
{
return 'ThinkPHP';
}
}
class Laravel implements Framework
{
public function getName(): string
{
return 'Laravel';
}
}
interface Factory {
public function getIns();
}
class ThinkPHPFactory implements Factory
{
public function getIns(): Framework
{
return new ThinkPHP();
}
}
class LaravelFactory implements Factory{
public function getIns(): Framework
{
return new Laravel();
}
}
class FactoryMethod
{
public function getThink()
{
$thinkFactory = new ThinkPHPFactory();
$think = $thinkFactory->getins();
return $think->getName();
}
public function getLaravel()
{
$laravelFactory = new LaravelFactory();
$laravel = $laravelFactory->getIns();
return $laravel->getName();
}
}
$fm = new FactoryMethod();
echo $fm->getThink(); // ThinkPHP
echo $fm->getLaravel(); // Laravel