PHP设计模式源码
PHP设计模式是一种在软件工程中常用的编程技巧,用于解决常见的软件设计问题,以下是一些常见的PHP设计模式及其源码示例:

(图片来源网络,侵删)
单例模式(Singleton)
单例模式确保一个类只有一个实例,并提供全局访问点。
class Singleton
{
private static $instance = null;
private function __construct()
{
// 防止通过反射或序列化创建新的实例
if (self::$instance) {
throw new Exception("Cannot instantiate singleton class");
}
}
public static function getInstance()
{
if (!self::$instance) {
self::$instance = new Singleton();
}
return self::$instance;
}
private function __clone() {}
private function __wakeup() {}
}
// 使用示例
$singleton1 = Singleton::getInstance();
$singleton2 = Singleton::getInstance();
if ($singleton1 === $singleton2) {
echo "Singleton works!";
} else {
echo "Singleton failed!";
} 工厂模式(Factory)
工厂模式用于创建对象,而不直接使用new关键字,这使得代码更易于测试和扩展。
interface Product
{
public function create();
}
class ConcreteProductA implements Product
{
public function create()
{
return new ConcreteProductA();
}
}
class ConcreteProductB implements Product
{
public function create()
{
return new ConcreteProductB();
}
}
class ProductFactory
{
public static function createProduct($type)
{
switch ($type) {
case 'A':
return new ConcreteProductA();
case 'B':
return new ConcreteProductB();
default:
throw new Exception("Invalid product type");
}
}
}
// 使用示例
$productA = ProductFactory::createProduct('A');
$productB = ProductFactory::createProduct('B'); 观察者模式(Observer)

(图片来源网络,侵删)
观察者模式定义了对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
interface Observer
{
public function update(Subject $subject);
}
interface Subject
{
public function registerObserver(Observer $observer);
public function removeObserver(Observer $observer);
public function notifyObservers();
}
class ConcreteSubject implements Subject
{
private $observers = [];
public function registerObserver(Observer $observer)
{
$this->observers[] = $observer;
}
public function removeObserver(Observer $observer)
{
$index = array_search($observer, $this->observers);
if ($index !== false) {
unset($this->observers[$index]);
}
}
public function notifyObservers()
{
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
}
class ConcreteObserver implements Observer
{
public function update(Subject $subject)
{
echo "Observer updated with subject state.";
}
}
// 使用示例
$subject = new ConcreteSubject();
$observer1 = new ConcreteObserver();
$observer2 = new ConcreteObserver();
$subject->registerObserver($observer1);
$subject->registerObserver($observer2);
$subject->notifyObservers(); // Both observers will be notified and print the message. 
(图片来源网络,侵删)
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/43895.html