工厂模式:工厂设计模式提供获取某个对象的新实例的一个接口,同时使调用代码避免确定实际实例化基类步骤。
为什么使用工厂模式:PHP中能够创建基于变量内容的类的新实例,减少主代码流中的基于条件复杂性; 同时如果类发生改变不需要所有的地方进行修改,只需要在工厂中进行修改。
细分为以下三种
简单工厂模式:与工厂方法比较,无法适应同种产品的增加,每增加一个产品都需要在工厂中增加一个产品的方法分支,这样的工厂不仅不封闭也让我们工作量增加,不能实现我们的‘懒’,能让程序做的事情,自己就不会再做。
工厂方法模式:与简单工厂模式相比较,拥有更加灵活的可以灵活增加新的产品,但是无法再深层次的增加产品的类型,只能在同层次的增加。
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口。与工厂方法相比更容易扩展产品的类型。
简单工厂:适用于生成数量少,功能简单的产品。
工厂类
Factory.php
<?php class Factory { //实例化并返回需要的对象 static function createMysql(){ $db = new Mysql(); return $db; } }
小例使用
index.php
<?php //使用工厂模式的创建mysql对象的方法 $db = Factory::createMysql();
其中可以在多个文件使用:index_0.php index_1.php......,但是因为都使用的是Factory类中的createMysql方法,所以当文件内容需要修改的时候,只需要更改工厂模式中的createMysql的方法
如:
实现不同的数据库的使用选择对象
index_99.php
<?php
//使用工厂模式的创建mysql对象的方法
$db = Factory::createMysql('sqlserver');
则其他文件不变,更改 Factory类的文件即可
<?php class Factory { static function createMysql($type = ''){ if(type=='sqlserver'){ $db = new Sqlserver(); }else{ $db = new Mysql(); } return $db; } }
当然这只是简单举例,也可以在createMysql方法中直接改变所有对象的连接数据库,这样就减少了我们后期更改的工作。
工厂模式可以任意命名这个静态还可以接受任意数据的参数,但是必须返回一个对象实例给调用对象。