1、工厂模式
工厂模式是一种专门用来创建其它对象的类(称为“工厂类”),根据传递参数的不同,来创建不同类的对象。我们可以使用工厂类创建对象,而不是直接使用 new。
工厂类中至少有一个公共的静态方法(称为“工厂方法”),静态方法接受一个参数,根据这个参数来创建不同类的对象。
【示例】定义加、减、乘、除四个类,并通过工厂类调用它们。
<?php
// 加法类
class Add {
public function getValue($num1, $num2){
return $num1 + $num2;
}
}
// 减法类
class Sub {
public function getValue($num1, $num2){
return $num1 – $num2;
}
}
// 乘法类
class Mul {
public function getValue($num1, $num2){
return $num1 * $num2;
}
}
// 除法类
class Div {
public function getValue($num1, $num2){
try {
if ($num2==0){
throw new Exception("除数不能为0");
}else {
return $num1/$num2;
}
}catch (Exception $e){
echo "错误信息:".$e->getMessage();
}
}
}
// 工程类,主要用来创建对象
// 功能:根据输入的运算符号,工厂就能实例化出合适的对象
class Factory {
public static function createObj($operate){
switch ($operate){
case '+':
return new Add();
break;
case '-':
return new Sub();
break;
case '*':
return new Mul();
break;
case '/':
return new Div();
break;
}
}
}
$test = Factory::createObj('/');
$result = $test->getValue(23,3);
echo $result;
?>
运行结果如下:
7.6666666666667
2、单例模式
单例模式也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,可以确保一个类只能创建一个对象,这么做可以极大节省内存空间,有利于我们协调系统的整体行为。 使用单例模式创建的类(“单例类”)不能再其它类中直接实例化,只能被其自身实例化。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 单例模式一个主要应用场合就是应用程序与数据库打交道的场景,在一个应用中会存在大量的数据库操作,针对数据库句柄连接数据库的行为,使用单例模式可以避免大量的 new 操作,因为每一次 new 操作都会消耗系统和内存的资源。