当前位置:首页 > PHP

php实现工厂模式

2026-02-16 10:52:41PHP

php实现工厂模式

工厂模式简介

工厂模式是一种创建型设计模式,用于在不暴露创建逻辑的情况下创建对象。通过定义一个公共接口或抽象类,让子类决定实例化哪个类。

php实现工厂模式

简单工厂模式实现

<?php
interface Product {
    public function getName();
}

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

class ConcreteProductB implements Product {
    public function getName() {
        return "Product B";
    }
}

class SimpleFactory {
    public function createProduct($type) {
        switch ($type) {
            case 'A':
                return new ConcreteProductA();
            case 'B':
                return new ConcreteProductB();
            default:
                throw new InvalidArgumentException("Unknown product type");
        }
    }
}

$factory = new SimpleFactory();
$productA = $factory->createProduct('A');
echo $productA->getName(); // 输出: Product A
?>

工厂方法模式实现

<?php
interface Product {
    public function getName();
}

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

class ConcreteProductB implements Product {
    public function getName() {
        return "Product B";
    }
}

abstract class Creator {
    abstract protected function factoryMethod();

    public function someOperation() {
        $product = $this->factoryMethod();
        return $product->getName();
    }
}

class ConcreteCreatorA extends Creator {
    protected function factoryMethod() {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    protected function factoryMethod() {
        return new ConcreteProductB();
    }
}

$creatorA = new ConcreteCreatorA();
echo $creatorA->someOperation(); // 输出: Product A
?>

抽象工厂模式实现

<?php
interface AbstractProductA {
    public function getName();
}

interface AbstractProductB {
    public function getName();
}

class ConcreteProductA1 implements AbstractProductA {
    public function getName() {
        return "Product A1";
    }
}

class ConcreteProductB1 implements AbstractProductB {
    public function getName() {
        return "Product B1";
    }
}

class ConcreteProductA2 implements AbstractProductA {
    public function getName() {
        return "Product A2";
    }
}

class ConcreteProductB2 implements AbstractProductB {
    public function getName() {
        return "Product B2";
    }
}

interface AbstractFactory {
    public function createProductA();
    public function createProductB();
}

class ConcreteFactory1 implements AbstractFactory {
    public function createProductA() {
        return new ConcreteProductA1();
    }

    public function createProductB() {
        return new ConcreteProductB1();
    }
}

class ConcreteFactory2 implements AbstractFactory {
    public function createProductA() {
        return new ConcreteProductA2();
    }

    public function createProductB() {
        return new ConcreteProductB2();
    }
}

$factory1 = new ConcreteFactory1();
$productA1 = $factory1->createProductA();
echo $productA1->getName(); // 输出: Product A1
?>

使用场景建议

简单工厂模式适用于对象创建逻辑不复杂的场景。工厂方法模式将实例化推迟到子类,更符合开闭原则。抽象工厂模式适合创建一系列相关或依赖的对象家族。

注意事项

工厂模式会增加代码复杂度,应仅在对象创建逻辑确实需要封装时使用。避免过度设计,简单的new操作可能更合适简单场景。

标签: 工厂模式
分享给朋友:

相关文章

vue路由实现模式

vue路由实现模式

Vue路由实现模式 Vue Router 提供了两种路由实现模式:Hash 模式和 History 模式。两种模式的主要区别在于 URL 的表现形式以及后端支持的需求。 Hash 模式 Hash 模…

vue实现工厂排班

vue实现工厂排班

Vue实现工厂排班系统 数据模型设计 使用Vue的响应式数据管理排班信息,核心数据结构包括员工列表、班次类型、日期范围等。例如: data() { return { employees:…

访问者模式js实现

访问者模式js实现

访问者模式概述 访问者模式是一种行为设计模式,允许在不修改对象结构的情况下定义新的操作。它将算法与对象结构分离,通过“访问者”对象实现多态行为。 核心组件 Visitor(访问者):声明访问具体…

如何启用react并发模式

如何启用react并发模式

启用React并发模式的方法 React并发模式(Concurrent Mode)是React 18引入的新特性,允许应用在渲染过程中保持响应性。以下是启用并发模式的具体方法: 升级到React 1…

php实现单例模式

php实现单例模式

单例模式的基本概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。适用于需要全局唯一对象的场景,如数据库连接、日志管理等。 PHP实现单例模式的核心步骤 私有化构造函数 防…

php调试模式实现

php调试模式实现

PHP调试模式实现方法 开启PHP调试模式可以帮助开发者快速定位和解决问题。以下是几种常用的方法: 使用php.ini配置文件 在php.ini文件中找到以下配置项并进行修改: display_…