zoukankan      html  css  js  c++  java
  • 控制反转&依赖注入

    控制反转
    如果要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所需要的外部资源C,这种情况被称为正向的。那么什么是反向呢?就是A类不再主动去获取C,而是被动等待,等待IoC/DI的容器获取一个C的实例,然后反向的注入到A 类中。

     

    依赖注入

    依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。
     
     
    //代码实现控制反转&依赖注入
    	class SuperMan{
    		public function __construct($obj){
    			$obj->call();
    		}
    	}
    	class Xpower{
    		public function call (){
    			echo 111;
    		}	
    	}
    	class Ultrabomb {
    		public function call(){
    			echo 222;
    		}
    	}
    	class Container{
    		protected $binds;
    		protected $instances;
    
    		public function bind($abstract,$concreate){
    			if($concreate instanceof Closure){
    				$this->binds[$abstract]=$concreate;
    			}else{
    				$this->instances[$abstract]=$concreate;
    			}
    		}
    		public function make($abstract,$paramters=[]){
    			if(isset($this->instances[$abstract])){
    				return $this->instances[$abstract];
    			}
    			array_unshift($paramters,$this);
    			return call_user_func_array($this->binds[$abstract],$paramters);
    		}
    	}
    	$container = new Container();
    	$container->bind("superman",function($container,$modelName=null){
    		return new SuperMan($container->make($modelName));
    	});
    	$container->bind('xpower',function($container){
    		return new Xpower();
    	});
    	$container->bind('ultrabomb',function($container){
    		return new Ultrabomb();
    	});
    	$superman1 = $container->make('superman',['xpower']);
    	$superman2 = $container->make('superman',['ultrabomb']);
    

      

  • 相关阅读:
    android 样式开发
    Android studio 开发环境搭建
    nodejs+express 4.x笔记
    C#: switch语句的重构『网摘』
    从实例谈OOP、工厂模式和重构
    ASP.NET FileUpload 上传文件类型验证
    asp.net 网页中播放 flash 和flv
    数据库设计中主键问题
    修改Sqlserver实例默认排序规则
    查看sqlserver被锁的表以及如何解锁
  • 原文地址:https://www.cnblogs.com/zh718594493/p/12113135.html
Copyright © 2011-2022 走看看