「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战」
课程背景
- 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
万物看本质
基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远- 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
- 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。
正文开始
前面我们介绍了单例模式 工厂模式。
- 类先实现单例模式保证每次请求只会初始化一次,节约系统高性能
- 工厂模式中定义统一的方法获取单例中的实例。
这里继续编写下一层,注册树模式。
介绍
如果每一个地方都直接调用工厂创建对象,那每次使用的时候都得去调用工厂模式创建。我们可以把最基本的,常用的类。放在一颗树上,并在初始方法中完成所有基本类的初始化。这样当我们需要使用某一个类的时候,直接从树上拿下一个直接使用即可。
开始编写
Register.php
<?php
namespace Liiy;
class Register{
protected static $objects; //保存所有的数组
//设置变量
public static function set($alias, $object){
if(!self::$objects[$alias]){
self::$objects[$alias] = $object;
}
}
//获取变量
public static function get($alias){
return self::$objects[$alias];
}
//卸载类
public static function _unset($alias){
unset(self::$objects[$alias]);
}
}
复制代码
注册树定义以后,只是定义了入口出口。具体树上要放些啥内容。还是要看开发者如何去定义的。
此时我们假设在创建db的时候把它添加到注册数中。
<?php
namespace Liiy;
class Factory{
public static function createDb(){
$db = Db::getInstance();
Register::set('db1',$db); //添加到注册树中
return $db;
}
}
复制代码
那样在入口文件中,我们就可以直接通过别名,拿到想要的实例对象了。
Factory::createDb(); //具体的初始化业务而定
$db = Register::get('db1');
var_dump($db);
复制代码
近期评论