1什么是设计模式?
1.1 设计模式是代码设计经验的总结。可以加快开发速度。
1.2 好处:代码重用,方便后期维护。
2常用的设计模式。
> 2.1. 单例设计模式:一个列只能创建一个对象,不管用什么方法,都无法创建第2个对象。如:数据库
>2.2 工厂设计模式:根据传递的不同的类名,生产不同类的对象的工厂。
3单例模式设计要求(三私一公)
>3.1私有的静态的保存对象的属性。
3.2私有的构造方法,阻止类外new对象。
3.3私有的克隆方法,阻止类外clone对象。
4单例举例说明:
<?php
class Student{
//私有的静态的保存对象的属性。
private static $obj = NULL;
//私有的构造方法:阻止类外new对象
private function __construct(){}
//私有的克隆方法:阻止类外clone对象
private function __clone(){}
//公共的静态的创建对象的方法
public static function getInstance()
{
//判断当前对象是否存在
if(!self::$obj instanceof self)
{
//如果当前对象不存在,则创建它
self::$obj = new self;
}
// 返回对象
return self::$obj;
}
}
//测试是否是单例
$obj1 = Student::getInstance();
$obj2 = Student::getInstance();
var_dump($obj1,$obj2);
/**
* instanceof 判断当前对象是不是某个类的对象,如果是某个类的对象,则返回true;
* 否则返回false。
*
* 语法 $obj instanceof className
*/
工厂设计模式
什么是工厂模式
根据传递的不同类名参数,来创建不同类的对象。实现创建不同类的对象的统一方式。
2工厂模式的设计要求
定义一个工厂类,例如:Factory.class.php
公共的静态的创建不同类的对象的方法。
该方法有一个唯一的类名参数。
向外部返回创建类的对象。
提示:工厂类本省不创建对象 。
注意:使用工厂类创建的对象的构造的方法都不能带参数。
举例说明
- list.php文件的代码
<?php
// (1) 类的自动加载
spl_autoload_register(function($className){
//构建类文件的真实路径
$filename = "./libs/$className.class.php";
//如果类文件存在,则包含
if(file_exists($filename)) require_once($filename);
});
//(2) 创建学生类对象
$stuObj = Factory::getInstance("Student");
// (3)创建教师类对象
$teaObj = Factory::getInstance("Teacher");
2.Factory.class.php 工厂类的文件代码
<?php
//定义最终的工厂类
final class Factory
{
//公共的静态的创建不同类对象的方法
public static function getInstance($className)
{
//创建不同类的对象,并返回
return new $className();
}
}
(3)Student.class.php学生类文件代码
<?php
//定义最终的学生类
final class Student
{
private $name = "张三丰";
private $age = 24;
public function __construct()
{
echo "{$this->name}学生年龄是{$this->age}岁";
}
}
(4) Teacher.class.php教师类的文件代码
//定义最终的教师类
final class Teacher
{
private $name = "张三疯";
private $school = "美国斯坦福大学";
public function __construct()
{
echo "{$this->name}老师毕业于{$this->school}";
}
}