<?php
/***
*单例模式
*使用场景:
*1、要求生产唯一序列号。 2、WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。 3、创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
*
***/
//创建一个 Singleton 类
//1、懒汉式,线程不安全 多线程不能正常工作
class SingleObject
{
//创建 SingleObject 的一个对象
private static $instance =null;
//让构造函数为 private,这样该类就不会被实例化
private function __construct()
{
# code...
}
//获取唯一可用的对象
public static function getInstance()
{
if(self::$instance === null)
self::$instance = new SingleObject();
return self::$instance;
}
public function showMessage()
{
echo "Hello World!";
}
}
$object = SingleObject::getInstance();
$object->showMessage();
exit;
/**
* 工厂模式
* 使用场景:
* N多个地方用到 user 如有更改 只需要改动工厂
* 假设您需要先创建对象,然后设置许多属性。此版本的工厂模式会将该进程封装在单个位置中,这样,不用复制复杂的初始化代码,也不必将复制好的代码在在代码库中到处粘贴。
*/
interface IUser
{
function getName();
}
class User implements IUser
{
public static function Load( $id )
{
return new User( $id );
}
public static function Create( )
{
return new User( null );
}
public function __construct( $id ) { }
public function getName()
{
return "Jack";
}
}
$uo = User::Load( 1 );
echo( $uo->getName()."\n" );
interface IUser
{
function getName();
}
class User implements IUser
{
public $name = 123;
public function __construct( $id ) { }//少量属性可以在这里设置
public function getName()
{
return $this->name;
}
public function setUserName($name)
{
$this->name = $name;
}
}
class UserFactory
{
public static function Create( $id )
{
$a = new User( $id );
$a->setUserName('abc');
return $a;
}
}
$uo = UserFactory::Create( 1 );
echo( $uo->getName()."\n" );
exit;