@lew
The Factory Method design pattern is a creational pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created. In PHP, you can use the Factory Method pattern to create objects in a flexible and extensible way.
Here's an example implementation of the Factory Method pattern in PHP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<?php // Define an interface for the product objects interface Product { public function getName(): string; } // Define a concrete implementation of the product interface class ConcreteProduct implements Product { public function getName(): string { return 'ConcreteProduct'; } } // Define the factory interface interface Factory { public function createProduct(): Product; } // Define a concrete implementation of the factory interface class ConcreteFactory implements Factory { public function createProduct(): Product { return new ConcreteProduct(); } } // Client code that uses the factory to create a product class Client { private $factory; public function __construct(Factory $factory) { $this->factory = $factory; } public function getProduct(): Product { return $this->factory->createProduct(); } } // Use the client code to create a product $factory = new ConcreteFactory(); $client = new Client($factory); $product = $client->getProduct(); echo $product->getName(); // Output: ConcreteProduct ?> |
In this example, we first define an interface Product
that represents the objects we want to create with the Factory Method pattern. We then define a concrete implementation of the Product
interface, ConcreteProduct
.
Next, we define the factory interface Factory
that specifies the method for creating the product object. We then define a concrete implementation of the Factory
interface, ConcreteFactory
, which creates an instance of ConcreteProduct
when its createProduct()
method is called.
Finally, we define a client class Client
that takes a Factory
object as a dependency and uses it to create a Product
object. We create an instance of ConcreteFactory
, pass it to a Client
object, and use it to create a Product
object.
This implementation of the Factory Method pattern allows for flexibility and extensibility, as new concrete products and factories can be added without modifying the client code.