设计模式三:注册树模式

注册树模式:

  通过将对象实例注册到一颗全局的对象树上,需要使用的时候直接从对象树上采摘的模式。

/**
 * 容器类
 */
class Container{

    //存储对线类
    private $bindings = [];

    //注册
    public function bind($abstract,$concrete = null){

        $this->bindings[$abstract] = $concrete;
    
    }

    //创建
    public function make($abstract,...$parms){
        $object = $this->bindings[$abstract];
        //闭包
        if($object instanceof Closure){
            return $object();
        }
        if(!is_object($object)){
           $object = new $object(...$parms);
        }
        return $object;
    }

    //删除
    public function delete($abstract){
        unset($this->bindings[$abstract]);
    }
}

class A {

    public function boot(){
        echo 'A类的boot方法';
    }
}

class B {

    public function boot(){
        echo 'B类的boot方法';
    }
}

//注册到注册树-》一般是全局加载的时候调用
$container = new Container();
$container->bind('A',new A());
$container->bind('B',new B());
//调用A类的方法
$container->make('A')->boot();

posted @ 2021-08-24 09:37  wish_yang  阅读(139)  评论(0编辑  收藏  举报