那么何为工厂模式?
从名字来看,似乎看不出什么端倪。工厂模式,和生产有关?还是和生产流程
子了,所谓工厂模式还真和生产有关。生产什么呢?生产出来的是一个实例对象。
通过什么设备生产?通过一个工厂类生产。怎么生产呢?工厂类调用自身静态方法
来生产对象实例。
工厂模式有一个关键的构造,根据一般原则命名为Factory的静态方法,然
而这只是一种原则,虽然工厂方法可以任意命名这个静态还可以接受任意数据
的参数,必须返回一个对象。
为什么要用工厂模式?
很多没接触过工厂模式的人会不禁问,为啥我要费那么大的劲儿去构造工厂类
单的问题。如果项目中,我们通过一个类创建对象。在快完成或者已经完成,要扩
展功能的时候,发现原来的类类名不是很合适或者发现类需要添加构造函数参数才
能实现功能扩展。我靠!我都通过这个类创建了一大堆对象实例了啊,难道我还要
一个一个去改不成?我们现在才感受到了“高内聚低耦合”的博大精深。没问题,工
厂方法可以解决这个问题。
再考虑一下,我要连接数据库,在php里面就有好几种方法,mysql扩展
情况而定喽。既然你们都是连接数据库的操作,你们就应该拥有相同的功能,建立
连接,查询,断开连接...(此处显示接口的重要性)。总而言之,这几种方法应
该“团结一致,一致对外”。如何实现呢?利用工厂模式。
工厂模式如何实现?
相对于单例模式,上面我们提供了足够的信息,工厂类,工厂类里面的静态方
二个问题,根据工厂类静态方法的参数,我们简单做个判断就好了。管你用
if..else..还是switch..case..,能快速高效完成判断该创建哪个类的工作
就好了。最后,一定要记得,工厂类静态方法返回一个对象。不是两个,更不是三
个。
基本的工厂类:
复制代码
//要创建对象实例的类
class MyObject{
}
//工厂类
class MyFactory{
public static function factory(){
return new MyObject():
}
}
$instance=MyFactory::factory();
复制代码
一个稍微复杂的工厂模式:
复制代码
<?php
interface Transport{
public function go();
}
class Bus implements Transport{
public function go(){
echo "bus每一站都要停";
}
}
class Car implements Transport{
public function go(){
echo "car跑的飞快";
}
}
class Bike implements Transport{
public function go(){
echo "bike比较慢";
}
}
class transFactory{
public static function factory($transport)
{
switch ($transport) {
case 'bus':
return new Bus();
break;
case 'car':
return new Car();
break;
case 'bike':
return new Bike();
break;
}
}
}
$transport=transFactory::factory('car');
$transport->go();
复制代码
需要工厂静态方法为factory()的时候,千万别再傻乎乎的把工厂类命名为
Factory了。为啥啊?别忘了同名构造函数的事儿啊~
php模式设计之 工厂模式
最新推荐文章于 2022-10-24 01:47:19 发布