设计模式
可以理解为解决问题的"套路"
工厂模式
总是需要去实例化很多的类来得到对象,这时就可以设计出一个工厂(其实就是一个类),该工厂的左右就是为人们"生产"各种对象。这种工厂通常只要指定类名,就可以据此获取一个该类的对象。
<?php
class factory{
//Instance实例
static function getInstance($className){
//安全操作,判断是否存在这个类文件,以此来保证能创建该类
if(file_exists('./class/'.$className.".class.php")){
$obj1 = new $className();
return $obj1;
}else{
return null;
}
}
}
$obj1 = factory::getInstance("A");//获取类A的一个对象
?>
单例模式
程序从启动到结束这个生命周期中只需要这一个对象,内存中只有这一份对象内存,多次创建时也只是这一个对象。
步骤:
- 私有化一个静态变量,用于存储创建当前对象
- 私有化构造方法,禁止调用
- 创建静态方法,用于实例化对象,如果第一步已经有值就用 ,没有重新创建
- 私有化clone方法,禁止调用
<?php
//单例模式:思路是类内部会存储一个自己的对象,每次去取存储的那个对象
class B{
public $v1 = 10;
//存储已经创建过的B对象
private static $instance;
private function __construct(){}
public static function getNew(){
if(!isset(B::$instance)){
B::$instance = new self;
}
return B::$instance;
}
//禁止克隆,克隆会重新创建对象
private function __clone(){}
}
$o1 = B::getNew();
$o1->v1 = 20;
$o2 = B::getNew();
$o2->v1 = 40;
var_dump($o1,$o2);
//打印结果:object(B)#1 (1) { ["v1"]=> int(40) } object(B)#1 (1) { ["v1"]=> int(40) }
?>