php 注册树,php常用设计模式(单例,工厂,注册树模式)
发布日期:2021-06-24 13:15:15 浏览次数:2 分类:技术文章

本文共 2074 字,大约阅读时间需要 6 分钟。

单例模式

实例

/医院

* 单例模式

*/

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

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

运行实例 »

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

转载地址:https://blog.csdn.net/weixin_33045961/article/details/116039328 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:matlab lu分解 l不是下三角,在MATLAB中执行LU分解而不进行旋转
下一篇:exc读入到matlab,matlab外部程序接口-excel

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月08日 03时06分44秒