当前位置:首页 > PHP

php 工厂模式 实现

2026-03-13 06:31:01PHP

工厂模式概述

工厂模式是一种创建型设计模式,用于在不暴露创建逻辑的情况下实例化对象。通过定义一个公共接口或抽象类,将对象的实例化过程委托给工厂类,实现解耦和灵活性。

简单工厂模式实现

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("Invalid product type");
        }
    }
}

// 使用示例
$factory = new SimpleFactory();
$product = $factory->createProduct('A');
echo $product->getName(); // 输出: Product A

工厂方法模式实现

工厂方法模式通过让子类决定实例化哪个类来实现对象的创建。

abstract class Creator {
    abstract public function factoryMethod(): Product;

    public function someOperation(): string {
        $product = $this->factoryMethod();
        return "Creator: " . $product->getName();
    }
}

class ConcreteCreatorA extends Creator {
    public function factoryMethod(): Product {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    public function factoryMethod(): Product {
        return new ConcreteProductB();
    }
}

// 使用示例
$creator = new ConcreteCreatorA();
echo $creator->someOperation(); // 输出: Creator: Product A

抽象工厂模式实现

抽象工厂模式提供一个创建一系列相关或依赖对象的接口,而无需指定具体类。

php 工厂模式 实现

interface AbstractFactory {
    public function createProductA(): ProductA;
    public function createProductB(): ProductB;
}

class ConcreteFactory1 implements AbstractFactory {
    public function createProductA(): ProductA {
        return new ConcreteProductA1();
    }
    public function createProductB(): ProductB {
        return new ConcreteProductB1();
    }
}

class ConcreteFactory2 implements AbstractFactory {
    public function createProductA(): ProductA {
        return new ConcreteProductA2();
    }
    public function createProductB(): ProductB {
        return new ConcreteProductB2();
    }
}

// 使用示例
$factory = new ConcreteFactory1();
$productA = $factory->createProductA();
$productB = $factory->createProductB();

适用场景

工厂模式适用于需要灵活创建对象的场景,特别是当对象创建过程复杂或需要根据条件动态决定创建哪种对象时。通过工厂模式可以提高代码的可维护性和扩展性,降低客户端与具体实现类之间的耦合度。

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

相关文章

vue路由实现模式

vue路由实现模式

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

vue实现发布订阅模式

vue实现发布订阅模式

发布订阅模式简介 发布订阅模式(Pub-Sub)是一种消息通信模式,发布者(Publisher)和订阅者(Subscriber)通过事件中心(Event Bus)解耦。Vue 本身基于观察者模式实现响…

php实现模式

php实现模式

PHP 实现设计模式的方法 设计模式是解决特定问题的可重用方案,PHP 中实现设计模式可以提升代码的可维护性和扩展性。以下是几种常见设计模式的实现方式。 单例模式 单例模式确保一个类只有一个实例,并…

js实现单例模式

js实现单例模式

单例模式的基本概念 单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。在JavaScript中,可以通过多种方式实现单例模式。 使用对象字面量 最简单的单例实现方式是直接使用对象字面…

访问者模式js实现

访问者模式js实现

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

js实现工厂

js实现工厂

工厂模式的概念 工厂模式是一种创建型设计模式,用于封装对象的创建逻辑,通过统一的接口动态决定实例化哪个类。在 JavaScript 中,工厂模式常用于解耦对象创建过程,提升代码的可维护性和扩展性。…