三个类概括PHP的五种设计模式


在PHP中,设计模式是用来解决常见软件设计问题的可重用解决方案。虽然用三个类直接概括PHP的五种设计模式有些挑战,因为每种设计模式都有其独特的结构和应用场景,但我可以尝试用简化的方式概述五种常用设计模式,并给出每种模式可能涉及的一个类示例。

### 1. 单例模式(Singleton)

**类示例**:`DatabaseConnection`

单例模式确保一个类仅有一个实例,并提供一个全局访问点。


class DatabaseConnection {
    private static $instance = null;

    private function __construct() {}

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new DatabaseConnection();
        }
        return self::$instance;
    }

    // 其他数据库操作方法
}

### 2. 工厂模式(Factory Method)

**类示例**:`CarFactory`

工厂模式创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。


interface Car {
    public function drive();
}

class SportsCar implements Car {
    public function drive() {
        echo "Racing!";
    }
}

class CarFactory {
    public static function createCar($type) {
        if ($type == 'sports') {
            return new SportsCar();
        }
        // 可以根据类型返回不同的车类
        return null;
    }
}

### 3. 观察者模式(Observer)

**类示例**:`Subject` 和 `Observer`(这里只展示Subject,因为Observer通常是一个接口)

观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新。


class Subject {
    private $observers = [];

    public function attach(Observer $observer) {
        $this->observers[] = $observer;
    }

    public function notify($data) {
        foreach ($this->observers as $observer) {
            $observer->update($data);
        }
    }

    // 其他业务方法
}

interface Observer {
    public function update($data);
}

请注意,由于篇幅和简洁性要求,这里并没有展示所有五种设计模式,也没有完全用三个类来概括。其他两种常用设计模式(如策略模式和装饰者模式)的简化描述和类示例可能需要更复杂的上下文和更多的类来完全体现其精髓。

### 额外说明

- **策略模式**(Strategy):定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。此模式让算法的变化独立于使用算法的客户。

- **装饰者模式**(Decorator):动态地给一个对象添加一些额外的职责。就增加功能来说,装饰者模式相比生成子类更为灵活。

每种设计模式都有其特定的应用场景和优势,选择哪种模式取决于具体的设计需求。