PHP 设计模式实战详解
作者:WeekendFlower
时间:2024-05-18
来源:互联网
浏览:0
设计模式为软件设计提供经过验证的解决方案,解决常见编程问题。本文深入探讨PHP中的常用设计模式,并通过实战案例进行阐述,涵盖单例模式、工厂方法模式和观察者模式。
设计模式为软件设计提供经过验证的解决方案,解决常见编程问题。本文深入探讨 PHP 中的常用设计模式,并通过实战案例进行阐述,涵盖单例模式、工厂方法模式和观察者模式。

PHP 设计模式实战详解
设计模式为软件设计提供了一套经过验证的解决方案,以解决常见编程问题。本文将深入探讨 PHP 中常用的设计模式,并通过实战案例进行阐述。
单例模式
单例模式确保某个类仅被实例化一次。这对于全局资源或配置管理器很有用。
class Database {
private static ?\PDO $instance = null;
private function __construct() {}
public static function getInstance(): \PDO {
if (self::$instance === null) {
self::$instance = new \PDO('mysql:host=localhost;dbname=my_db', 'user', 'password');
}
return self::$instance;
}
}
// 使用 Singleton
$db1 = Database::getInstance();
$db2 = Database::getInstance();
// 两个变量指向同一个 PDO 对象
var_dump($db1 === $db2); // true工厂方法模式
工厂方法模式定义一个创建对象的接口,但允许子类更改创建过程。这提供了一种分离创建逻辑和产品类的灵活方式。
interface Shape {
public function draw(): void;
}
class Circle implements Shape {
public function draw(): void {
echo 'Drawing a circle.' . PHP_EOL;
}
}
class Square implements Shape {
public function draw(): void {
echo 'Drawing a square.' . PHP_EOL;
}
}
class ShapeFactory {
public static function createShape(string $type): Shape {
switch ($type) {
case 'circle':
return new Circle();
case 'square':
return new Square();
default:
throw new InvalidArgumentException('Invalid shape type.');
}
}
}
// 使用工厂方法
$circle = ShapeFactory::createShape('circle');
$square = ShapeFactory::createShape('square');
$circle->draw(); // Drawing a circle.
$square->draw(); // Drawing a square.观察者模式
观察者模式定义了一个一对多的依赖关系,其中一个对象(主题)可以通知多个对象(观察者)状态变化。
interface Subject {
public function attach(Observer $observer): void;
public function detach(Observer $observer): void;
public function notify(): void;
}
class NewsPortal implements Subject {
private array $observers = [];
private string $latestNews;
public function attach(Observer $observer): void {
$this->observers[] = $observer;
}
public function detach(Observer $observer): void {
unset($this->observers[array_search($observer, $this->observers)]);
}
public function notify(): void {
foreach ($this->observers as $observer) {
$observer->update($this);
}
}
public function publishNews(string $news): void {
$this->latestNews = $news;
$this->notify();
}
}
interface Observer {
public function update(Subject $subject): void;
}
class NewsReader implements Observer {
public function update(Subject $subject): void {
$news = $subject->getLatestNews();
echo 'Received latest news: ' . $news . PHP_EOL;
}
}
// 使用观察者模式
$newsPortal = new NewsPortal();
$reader1 = new NewsReader();
$reader2 = new NewsReader();
$newsPortal->attach($reader1);
$newsPortal->attach($reader2);
$newsPortal->publishNews('New developments in the ongoing war.');
$newsPortal->detach($reader2);
$newsPortal->publishNews('Another major breakthrough in science.');
作者最新文章
赤友清理大师
2026-09-16 17:43
南邮光擎智算团队:GaN基Micro-LED光计算芯片从理论到流片的突破
2026-09-08 18:35
多张照片怎么合成PDF文件?三种图片转PDF工具怎么选?
2026-09-03 17:04
Excel转PDF防乱版指南:在线与本地双方案及排版检查
2026-09-03 10:04
多个PDF怎么合并成一个?合并后顺序怎么检查?
2026-09-02 19:54
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多
Windows 10
Windows
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式
Windows/macOS/Linux
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















