在PHP开发中,掌握多种设计模式可以提高代码的可读性、可维护性和可扩展性。以下是一些常见的PHP设计模式实例,通过表格形式展示其实现技巧。
单例模式
单例模式确保一个类只有一个实例,并提供一个全局访问点。

| 技巧 | 实现方式 |
|---|---|
| 静态变量 | 使用静态变量存储类的唯一实例 |
| 构造函数 | 将构造函数设置为私有,防止外部直接创建实例 |
| 静态方法 | 提供一个静态方法用于获取类的唯一实例 |
```php
class Singleton {
private static $instance;
private function __construct() {}
public static function getInstance() {
if (self::$instance == null) {
self::$instance = new Singleton();
}
return self::$instance;
}
private function __clone() {}
private function __wakeup() {}
}
```
观察者模式
观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知并自动更新。
| 技巧 | 实现方式 |
|---|---|
| 抽象观察者 | 创建一个抽象观察者类,定义更新方法 |
| 抽象主题 | 创建一个抽象主题类,定义添加/删除观察者和通知方法 |
| 具体观察者 | 实现具体观察者类,重写更新方法 |
| 具体主题 | 实现具体主题类,存储观察者列表 |
```php
interface Observer {
public function update();
}
interface Subject {
public function attach(Observer $observer);
public function detach(Observer $observer);
public function notify();
}
class ConcreteObserver implements Observer {
public function update() {
// 更新逻辑
}
}
class ConcreteSubject implements Subject {
private $observers = [];
private $data;
public function attach(Observer $observer) {
$this->observers[] = $observer;
}
public function detach(Observer $observer) {
$key = array_search($observer, $this->observers);
if ($key !== false) {
unset($this->observers[$key]);
}
}
public function notify() {
foreach ($this->observers as $observer) {
$observer->update();
}
}
public function setData($data) {
$this->data = $data;
$this->notify();
}
}
```
工厂模式
工厂模式创建对象时,不是直接创建对象实例,而是通过工厂类来创建对象。
| 技巧 | 实现方式 |
|---|---|
| 抽象工厂 | 创建一个抽象工厂类,定义创建对象的接口 |
| 具体工厂 | 实现具体工厂类,创建具体的产品对象 |
| 产品 | 定义产品类 |
```php
interface Product {
public function method();
}
class ConcreteProduct implements Product {
public function method() {
// 实现方法
}
}
interface Factory {
public function createProduct();
}
class ConcreteFactory implements Factory {
public function createProduct() {
return new ConcreteProduct();
}
}
```
通过以上实例,我们可以看到PHP设计模式在实际开发中的应用。熟练掌握这些模式,有助于提高代码质量,降低维护成本。









