在 PHP 中,创建型设计模式主要用于处理对象的创建和实例化。这些模式提供了一种在创建对象时增加灵活性和可维护性的方式。以下是一些常见的创建型设计模式,以及在 PHP 中的实现方式:

1. 工厂模式(Factory Pattern):

工厂模式提供了一种创建对象的接口,但让子类决定实例化哪个类。它允许一个类在其实例化时延迟到子类。

示例代码:
interface Product {
    public function getName();
}

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

class Factory {
    public function createProduct() {
        return new ConcreteProduct();
    }
}

// 使用工厂
$factory = new Factory();
$product = $factory->createProduct();
echo $product->getName(); // 输出 "ConcreteProduct"

2. 抽象工厂模式(Abstract Factory Pattern):

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定它们的类。

示例代码:
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();
$productB1 = $factory1->createProductB();

$factory2 = new ConcreteFactory2();
$productA2 = $factory2->createProductA();
$productB2 = $factory2->createProductB();

3. 单例模式(Singleton Pattern):

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

示例代码:
class Singleton {
    private static $instance;

    private function __construct() {}

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

// 使用单例
$singleton = Singleton::getInstance();

4. 建造者模式(Builder Pattern):

建造者模式用于构建一个复杂对象,允许按步骤构建,以及在构建过程中细粒度控制。

示例代码:
class Product {
    private $parts = [];

    public function addPart($part) {
        $this->parts[] = $part;
    }

    public function getParts() {
        return $this->parts;
    }
}

interface Builder {
    public function buildPartA();
    public function buildPartB();
    public function getResult();
}

class ConcreteBuilder implements Builder {
    private $product;

    public function __construct() {
        $this->product = new Product();
    }

    public function buildPartA() {
        $this->product->addPart("PartA");
    }

    public function buildPartB() {
        $this->product->addPart("PartB");
    }

    public function getResult() {
        return $this->product;
    }
}

class Director {
    public function construct(Builder $builder) {
        $builder->buildPartA();
        $builder->buildPartB();
    }
}

// 使用建造者模式
$builder = new ConcreteBuilder();
$director = new Director();
$director->construct($builder);
$product = $builder->getResult();
$parts = $product->getParts(); // 包含 PartA 和 PartB 的数组

这些是一些在 PHP 中实现的常见创建型设计模式。它们提供了一种灵活、可维护和可扩展的方式来处理对象的创建过程。


转载请注明出处:http://www.pingtaimeng.com/article/detail/11930/PHP