php 注册树,php常用设计模式(单例,工厂,注册树模式)

单例模式

实例

/医院

* 单例模式

*/

class Single

{

private static $instance = null;

// 不允许实例化

private function __construct() { }

// 不允许克隆

private function __clone() { }

// 获取对象

public static function getInstance()

{

if (self::$instance == null) {

self::$instance = new self();

}

return self::$instance;

}

// 从1加到100

public function total() {

$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. 创建一个静态方法判断并获取返回对象

运行实例 »

点击 "运行实例" 按钮查看在线实例

简单工厂模式

实例

/医院

*  简单工厂模式

*/

class ProductFactory

{

public static function create($type)

{

switch ($type) {

case 'A':

return new ProductA();

break;

case 'B':

return new ProductB();

break;

}

}

}

class ProductA {

public function __construct()

{

echo 'this is productA';

}

}

class ProductB {

public function __construct()

{

echo 'this is productB';

}

}

ProductFactory::create('A');  // this is productA

echo '


';

ProductFactory::create('B'); // this is productB

// 总结:

//工厂模式与单例模式只产生单一实例不同,工厂模式用于创建多种类型的多个实例对象

运行实例 »

点击 "运行实例" 按钮查看在线实例

注册树模式 / 对象池模式

实例

/医院

*  注册树模式 / 对象池模式

*/

class Demo1

{

public function show()

{

echo 'this is demo1';

}

}

class Demo2

{

public function show()

{

echo 'this is demo2';

}

}

class Demo3

{

public function show()

{

echo 'this is demo3';

}

}

class Tree

{

private static $obj = [];

// 将对象挂载到注册树上

public static function set($key, $val)

{

self::$obj[$key] = $val;

}

// 将对象从注册树上取出来

public static function get($key)

{

return self::$obj[$key];

}

// 将对象从注册树上删除

public static function del($index)

{

unset(self::$obj[$index]);

}

}

Tree::set('demo1',new Demo1());

Tree::set('demo2',new Demo2());

Tree::set('demo3',new Demo3());

echo '


';

$obj1 = Tree::get('demo1');

$obj1->show(); // this is demo1

echo '


';

$obj2 = Tree::get('demo2');

$obj2->show(); // this is demo2

echo '


';

$obj3 = Tree::get('demo3');

$obj3->show(); // this is demo3

// 总结:  注册树模式就是直接用数组来存储对象

运行实例 »

点击 "运行实例" 按钮查看在线实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值