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 ?>

 

posted @ 2020-11-16 20:56  键盘苦力  阅读(134)  评论(0)    收藏  举报