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();
本文深入探讨了PHP中的单例模式和工厂模式,解释了如何通过单例模式确保一个类仅有一个实例,以及如何利用工厂模式创建对象实例。文章详细介绍了单例模式在数据库连接中的应用,以及工厂模式在创建不同类型对象时的灵活性。
493

被折叠的 条评论
为什么被折叠?



