我来为你讲解“PHP工厂模式简单实现方法示例”的攻略。
工厂模式是一种创建型设计模式,它为创建对象提供了一种接口,该接口可以在提供其指定的参数的情况下创建任何类型的对象。工厂模式隐藏了实际的创建逻辑,而只是向客户端提供创建对象的方式。
工厂模式的实现一般包括三个成分:
下面是通过PHP语言实现一个工厂模式示例的步骤:
interface CarFactory {
public static function createCar();
}
class BmwFactory implements CarFactory {
public static function createCar() {
return new Bmw();
}
}
class AudiFactory implements CarFactory {
public static function createCar() {
return new Audi();
}
}
interface Car {
public function run();
}
class Bmw implements Car {
public function run() {
echo "Bmw is running...";
}
}
class Audi implements Car {
public function run() {
echo "Audi is running...";
}
}
$bmw = BmwFactory::createCar();
$bmw->run();
$audi = AudiFactory::createCar();
$audi->run();
客户端只需要知道具体的工厂类即可创建相应的产品对象,无需关心产品对象的创建细节。
下面举两个示例说明:
class Singleton {
private static $instance;
private function __construct() {}
public static function getInstance(): Singleton {
if (!isset(self::$instance)) {
self::$instance = new Singleton();
}
return self::$instance;
}
}
class SingletonFactory {
public static function createSingleton() {
return Singleton::getInstance();
}
}
工厂方法中返回了一个单例对象。如果需要创建不同的单例对象,只需修改SingletonFactory。
class Logger {
private $level;
public function __construct($level) {
$this->level = $level;
}
public function log($msg) {
echo "[$this->level]" . $msg . "\n";
}
}
class LoggerFactory {
public static function createLogger($level) {
return new Logger($level);
}
}
class UserController {
private $logger;
public function __construct() {
$this->logger = LoggerFactory::createLogger("UserController");
}
}
在UserController中使用了LoggerFactory创建了一个Logger类的实例,并注入到UserController中。如果需要更换Logger的实现,只需修改LoggerFactory即可。
以上就是“PHP工厂模式简单实现方法示例”的完整攻略。