单例模式
实例
/医院
*单例模式
*/
classSingle
{
privatestatic$instance=null;
//不允许实例化
privatefunction__construct(){}
//不允许克隆
privatefunction__clone(){}
//获取对象
publicstaticfunctiongetInstance()
{
if(self::$instance==null){
self::$instance=newself();
}
returnself::$instance;
}
//从1加到100
publicfunctiontotal(){
$s=0;
for($i=1;$i<=100;$i++){
$s=$s+$i;
}
echo$s;
}
}
$obj1=Single::getInstance();
var_dump($obj1);//object(Single)#1(0){}
$obj2=Single::getInstance();
var_dump($obj2);//object(Single)#1(0){}
echo'
';
$obj1->total();
//单例模式总结
//1.创建一个null的静态实例
//2.不允许实例化,不允许克隆
//3.创建一个静态方法判断并获取返回对象
运行实例 »
点击 "运行实例" 按钮查看在线实例
简单工厂模式
实例
/医院
*简单工厂模式
*/
classProductFactory
{
publicstaticfunctioncreate($type)
{
switch($type){
case'A':
returnnewProductA();
break;
case'B':
returnnewProductB();
break;
}
}
}
classProductA{
publicfunction__construct()
{
echo'thisisproductA';
}
}
classProductB{
publicfunction__construct()
{
echo'thisisproductB';
}
}
ProductFactory::create('A');//thisisproductA
echo'
';
ProductFactory::create('B');//thisisproductB
//总结:
//工厂模式与单例模式只产生单一实例不同,工厂模式用于创建多种类型的多个实例对象
运行实例 »
点击 "运行实例" 按钮查看在线实例
注册树模式 / 对象池模式
实例
/医院
*注册树模式/对象池模式
*/
classDemo1
{
publicfunctionshow()
{
echo'thisisdemo1';
}
}
classDemo2
{
publicfunctionshow()
{
echo'thisisdemo2';
}
}
classDemo3
{
publicfunctionshow()
{
echo'thisisdemo3';
}
}
classTree
{
privatestatic$obj=[];
//将对象挂载到注册树上
publicstaticfunctionset($key,$val)
{
self::$obj[$key]=$val;
}
//将对象从注册树上取出来
publicstaticfunctionget($key)
{
returnself::$obj[$key];
}
//将对象从注册树上删除
publicstaticfunctiondel($index)
{
unset(self::$obj[$index]);
}
}
Tree::set('demo1',newDemo1());
Tree::set('demo2',newDemo2());
Tree::set('demo3',newDemo3());
echo'
';
$obj1=Tree::get('demo1');
$obj1->show();//thisisdemo1
echo'
';
$obj2=Tree::get('demo2');
$obj2->show();//thisisdemo2
echo'
';
$obj3=Tree::get('demo3');
$obj3->show();//thisisdemo3
//总结:注册树模式就是直接用数组来存储对象
运行实例 »
点击 "运行实例" 按钮查看在线实例