1、什么是工厂设计模式
1)根据传递不同的类名参数,返回不同类的对象;
2)工厂模式,就是生产各种的不同类的对象;
3)工厂模式,改变了在类外使用new关键字创建对象的方式,改成了在工厂类中创建类的对象。
4)在类的外部我们无法控制类的行为,但在类内部自己可以控制类的行为。
2、工厂设计模式的要求
1)工厂类中的方法,应该是公共的静态的方法;
2)该方法功能:就是根据传递的不同参数,去创建不同的类实例;
3)提示:工厂设计模式,一般会与单例设计模式搭配使用。
3、实例:工厂设计模式的简单应用
图片.png
4、实例:单例工厂类的实现
class Student{
public $name = "张三";
public $age = 20;
public function __construct(){
echo $this->name."的年龄是".$this->age."岁"."<br>";
}
}
class Teacher{
public $name = "李四";
public $edu = "湖南大学";
public function __construct(){
echo $this->name."毕业于".$this->edu."<br>";
}
}
//定义最终单例工厂类
//工厂类生产的对象是单例
final class Factory
{
//私有的静态的保存不同类对象的属性
private static $obj= [];
//私有的构造方法:阻止类外new对象
private function __construct(){}
//私有的克隆方法:阻止类外clone对象
private function __clone(){}
//公共的静态的创建不同类对象的方法
public static function getInstance($className){
//判断传递的当前类的对象是否存在
if(!isset(self::$obj[$className])){
self::$obj[$className] = new $className;
}
//返回当前类的对象
return self::$obj[$className];
}
}
$obj1 = Factory::getInstance('Student');
$obj2 = Factory::getInstance('Student');
$obj3 = Factory::getInstance('Teacher');
$obj4 = Factory::getInstance('Teacher');
var_dump($obj1,$obj2,$obj3,$obj4);
结果如下:

网友评论