设计模式:简单工厂和单例工厂
1 <?php 2 /** 3 * 纯粹工厂类 4 */ 5 /*class Factory { 6 public static function getOBJ($class_name) { 7 include_once './'.$class_name.'.class.php'; 8 return new $class_name; //可变类 9 } 10 } 11 */ 12 13 /** 14 * 单例工厂类 15 */ 16 class Factory { 17 /* 18 生产单例对象 19 @param string $class_name 获得对象所需要的类名 20 @param object 单例对象 21 */ 22 public static function getOBJ($class_name) { 23 //键 => 值 24 // 类名 => 该类已经实例化了的对象 25 static $obj_list = array(); 26 // 判断当前的类有没有被实例化 27 if (!isset($obj_list[$class_name])) { 28 //说明没有被实例化,所以需要实例化 29 include_once './'.$class_name.'.class.php'; 30 $obj_list[$class_name] = new $class_name; 31 } 32 return $obj_list[$class_name]; 33 } 34 }
调用方法:
1 include './Factory.class.php'; 2 $stu1 = Factory::getOBJ('Student'); 3 $stu2 = Factory::getOBJ('Student'); 4 echo "<pre>"; 5 var_dump($stu1); 6 echo "</pre>"; 7 echo "<hr>"; 8 9 echo "<pre>"; 10 var_dump($stu2); 11 echo "</pre>"; 12 echo "<hr>";
Student.class.php
1 <?php 2 class Student{ 3 public function __construct(){ 4 echo "我是个小学生"; 5 } 6 }
工厂模式
概念
也是一种设计模式!
工厂模式的含义就是:设计一个类(此时这个类就叫做“工厂类”),该类的作用就是帮助其他的类“生产”对象!
简单工厂
纯粹工厂
以上代码
单例工厂
也是一种单例的实现,但不是“三私一公”的实现,而是在生产对象的工厂类中实现单例效果!