PHP单例模式,就是一个对象只被生成一次,但该对象可以被其它众多对象使用。单例模式使用最多的场景,是数据库连接操作。我们知道,生成一个对象的操作是用new函数来实现,但是new对象都会消耗内存,而且有时候对同一个对象,在不同文件中可能会生成多次,这就造成了系统资源的浪费。然而使用单例模式,则可以很好的避免这种情况。
以数据库为例,假设我们有一个数据库的类,要实现数据库连接。如果不使用单例模式,那么在很多PHP文件中,我们可能到要创建这样的一个连接,这其实是对资源的很大浪费。那么下面介绍单例模式实现方法:
//@1单个类 单例模式
/**
*单例模式:一个类只能有一个对象(只能实例化一次)
*三私一公
私有化静态属性
私有化构造方法
私有化克隆方法
公有化静态方法
*/
//php下的单例模式
class Database
{
private static $instance;
//防止在外部进行 实例化 new Single
private function __construct()
{
}
//防止被克隆 $b=clone $a
private function __clone()
{
} public static
function
getInstace()
{
if
(self::
$db
) {
return
self::
$db
;
}
else
{
//生成自己
self::
$db
=
new
self();
return
self::
$db
;
}
}
}
//正确获取实例方法
$db
= Database::getInstace();
@2工厂模式
(1)基本的工厂类
//要创建对象实例的类
class MyObject{
}
//工厂类
class MyFactory{
public static function factory(){
return new MyObject():
}
}
$instance=MyFactory::factory();
(2)稍微复杂点的工厂类
interface Transport{
public function go();
}
class Bus implements Transport{
public function go(){
echo "bus11111";
}
}
class Car implements Transport{
public function go(){
echo "car1111111";
}
}
class Bike implements Transport{
public function go(){
echo "bike111111111";
}
}
class transFactory{
public static function factory($transport)
{
switch ($transport) {
case 'bus':
return new Bus();
break;
case 'car':
return new Car();
break;
case 'bike':
return new Bike();
break;
}
}
}
$transport=transFactory::factory('car');
$transport->go();