PHP设计模式之工厂模式
什么是工厂模式?
构建一个工厂类,专门生产对象。怎么判断是不是工厂类呢?
工厂类特点:内部有一个静态方法实现实例化。(工厂类必须提供一个生产产品的方法)
工厂模式特点:将调用者和创建者分离,调用者直接向工厂类请求获取调用对象,减少代码耦合,提高系统的维护性和扩展性。
为什么要使用工厂模式?
如果构造方法改变,修改实例化对象的工作量巨大,需要使用工厂类模式进行代码改造,优化代码。
1.当前类的实例,有可能会在多个脚本文件中被使用。
应用场景:有多个产品类时就要用到工厂模式,比如在数据库连接中,我们可以采用多种数据库连接方法,有mysql扩展,mysqli扩展,PDO扩展等,在这种情况下我们可以一个扩展对应一个产品类,然后采用工厂模式。
1 <?php 2 namespace Demo1; 3 // 演示类 4 class Test1 5 { 6 public function __construct($arg1) 7 { 8 echo '对象创建成功,参数是:' . $arg1 .PHP_EOL; 9 } 10 } 11 // 演示类 12 class Test2 13 { 14 public function __construct($arg1,$arg2) 15 { 16 echo '对象创建成功,参数是:' . implode(',',[$arg1,$arg2]).PHP_EOL; 17 } 18 } 19 // 演示类 20 class Test3 21 { 22 public function __construct($arg1,$arg2,$arg3) 23 { 24 echo '对象创建成功,参数是:' . implode(',',[$arg1,$arg2,$arg3]).PHP_EOL; 25 } 26 } 27 // 演示类 28 class Test4 29 { 30 public function __construct() 31 { 32 echo '对象创建成功,无参数'; 33 } 34 } 35 // 工厂类 36 class Factory 37 { 38 public static function create($className,...$arguments) 39 { 40 //将类实例返回 41 return new $className(...$arguments); 42 } 43 } 44 // 调用 45 Factory::create('Test1::class','html'); 46 Factory::create('Test2::class','html','css'); 47 Factory::create('Test3::class','html','css','js'); 48 Factory::create('Test4::class'); 49 ?>

浙公网安备 33010602011771号