说明 :
本模式与简单工厂模式极为相似. 区别在于,不需要实例化一个工厂对象即可创建产品.
应用场景:
当创建过程较为简单时, 就使用静态工厂方法. 当创建过程较为复杂时,使用简单工厂方法.
静态工厂: 静态方法本质上是一个过程化的实现, 当创建过程几句话就能说明白的时候,就可以使用.
简单工厂:创建过程需要工厂对象大量复杂操作,使用到工厂对象的实例属性及其他实例方法时,就只能使用本模式了.
代码实现:
/** * 静态工厂示例 * User: 蓝冰大侠 */ class CStaticFactory extends SController { public function index() { //使用工厂创建产品X $product = Factory::createProduct('x'); $product->methodA(); $product->methodB(); //使用工厂创建产品Y $product = Factory::createProduct('y'); $product->methodA(); $product->methodB(); } } //所有产品的基类 abstract class Product { //每个产品都必须实现以下方法 abstract public function methodA(); abstract public function methodB(); } //定义产品类X class ProductX extends Product { public function methodA() { echo 'product x do A.'; } public function methodB() { echo 'product X do B.'; } } //定义 产品类Y class ProductY extends Product { public function methodA() { echo 'product Y do A'; } public function methodB() { echo 'product Y do B'; } } //定义静态工厂类 class Factory { //根据参数的不同创建不同的产品 static public function createProduct($type): Product { if ($type == 'x') { return new ProductX(); } if ($type == 'y') { return new ProductY(); } throw new Exception('Unknown product type.'); } }