当前位置:首页 > PHP

php实现设计模式

2026-02-16 09:23:25PHP

单例模式(Singleton)

单例模式确保一个类只有一个实例,并提供全局访问点。适用于需要控制资源访问的场景,如数据库连接。

class Singleton {
    private static $instance;

    private function __construct() {}

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

$singleton = Singleton::getInstance();

工厂模式(Factory)

工厂模式通过一个工厂类创建对象,而不是直接实例化具体类。适用于对象创建逻辑复杂的场景。

interface Product {
    public function getName();
}

class ConcreteProductA implements Product {
    public function getName() {
        return "Product A";
    }
}

class ProductFactory {
    public static function createProduct($type) {
        switch ($type) {
            case 'A':
                return new ConcreteProductA();
            default:
                throw new Exception("Invalid product type");
        }
    }
}

$product = ProductFactory::createProduct('A');

观察者模式(Observer)

观察者模式定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知。

php实现设计模式

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

class ConcreteObserver implements Observer {
    public function update($data) {
        echo "Received update with data: " . $data . "\n";
    }
}

class Subject {
    private $observers = [];

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

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

$subject = new Subject();
$observer = new ConcreteObserver();
$subject->attach($observer);
$subject->notify("Some data");

策略模式(Strategy)

策略模式定义一系列算法,将每个算法封装起来,并使它们可以互相替换。适用于需要在运行时选择不同算法的场景。

interface Strategy {
    public function execute($a, $b);
}

class AddStrategy implements Strategy {
    public function execute($a, $b) {
        return $a + $b;
    }
}

class Context {
    private $strategy;

    public function __construct(Strategy $strategy) {
        $this->strategy = $strategy;
    }

    public function executeStrategy($a, $b) {
        return $this->strategy->execute($a, $b);
    }
}

$context = new Context(new AddStrategy());
$result = $context->executeStrategy(5, 3);

适配器模式(Adapter)

适配器模式将一个类的接口转换成客户希望的另一个接口。适用于使不兼容的类能够一起工作。

php实现设计模式

interface Target {
    public function request();
}

class Adaptee {
    public function specificRequest() {
        return "Specific request";
    }
}

class Adapter implements Target {
    private $adaptee;

    public function __construct(Adaptee $adaptee) {
        $this->adaptee = $adaptee;
    }

    public function request() {
        return $this->adaptee->specificRequest();
    }
}

$adapter = new Adapter(new Adaptee());
$result = $adapter->request();

装饰器模式(Decorator)

装饰器模式动态地给一个对象添加一些额外的职责。适用于需要扩展对象功能的场景。

interface Component {
    public function operation();
}

class ConcreteComponent implements Component {
    public function operation() {
        return "ConcreteComponent";
    }
}

class Decorator implements Component {
    protected $component;

    public function __construct(Component $component) {
        $this->component = $component;
    }

    public function operation() {
        return $this->component->operation();
    }
}

class ConcreteDecorator extends Decorator {
    public function operation() {
        return parent::operation() . " decorated";
    }
}

$decorated = new ConcreteDecorator(new ConcreteComponent());
$result = $decorated->operation();

责任链模式(Chain of Responsibility)

责任链模式将请求的发送者和接收者解耦,使多个对象都有机会处理请求。适用于多个对象可以处理同一请求的场景。

abstract class Handler {
    protected $successor;

    public function setSuccessor(Handler $successor) {
        $this->successor = $successor;
    }

    abstract public function handleRequest($request);
}

class ConcreteHandlerA extends Handler {
    public function handleRequest($request) {
        if ($request === 'A') {
            return "Handled by A";
        } elseif ($this->successor !== null) {
            return $this->successor->handleRequest($request);
        }
        return null;
    }
}

$handlerA = new ConcreteHandlerA();
$result = $handlerA->handleRequest('A');

模板方法模式(Template Method)

模板方法模式定义一个操作中的算法骨架,将某些步骤延迟到子类中实现。适用于有固定流程但某些步骤可变的场景。

abstract class AbstractClass {
    public function templateMethod() {
        $this->primitiveOperation1();
        $this->primitiveOperation2();
    }

    abstract protected function primitiveOperation1();
    abstract protected function primitiveOperation2();
}

class ConcreteClass extends AbstractClass {
    protected function primitiveOperation1() {
        echo "Operation 1\n";
    }

    protected function primitiveOperation2() {
        echo "Operation 2\n";
    }
}

$concrete = new ConcreteClass();
$concrete->templateMethod();

标签: 模式php
分享给朋友:

相关文章

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php 购物车实现

php 购物车实现

数据库设计 购物车功能通常需要设计数据库表存储商品和用户信息。常见的表包括products(商品表)、users(用户表)和cart(购物车表)。cart表通常包含字段:id(主键)、user_id(…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…