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 Method)
工厂模式用于创建对象,而不直接使用new关键字,这使得代码更易于测试和扩展。
interface Product { public function operation(): string; } class ConcreteProductA implements Product { public function operation(): string { return "ConcreteProductA"; } } class ConcreteProductB implements Product { public function operation(): string { return "ConcreteProductB"; } } class Creator { public static function factoryMethod(string $type): Product { switch ($type) { case 'A': return new ConcreteProductA(); case 'B': return new ConcreteProductB(); default: throw new Exception("Invalid type"); } } } // 使用示例 $productA = Creator::factoryMethod('A'); $productB = Creator::factoryMethod('B'); echo $productA->operation(); // 输出: ConcreteProductA echo $productB->operation(); // 输出: ConcreteProductB
观察者模式(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 = []; private $state; 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); } } public function setState($state) { $this->state = $state; $this->notifyObservers(); } } class ConcreteObserver implements Observer { public function update(Subject $subject) { echo "Observer updated with state: " . $subject->getState() . "n"; } } // 使用示例 $subject = new ConcreteSubject(); $observer1 = new ConcreteObserver(); $observer2 = new ConcreteObserver(); $subject->registerObserver($observer1); $subject->registerObserver($observer2); $subject->setState("New State"); // 输出: Observer updated with state: New State (两次)
到此,以上就是小编对于php设计模式 源码 _PHP的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。
(图片来源网络,侵删)
本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/65908.html