什么是依赖注入(DependencyInjection)依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖抽象(接口)。依赖倒置是一种软件设计思想。在传统软件中,上层代码依赖于下层代码。当下层代码发生变化时,上层代码也必须随之变化,维护成本高。依赖倒置原则的思想是上层不应该依赖下层,而应该依赖接口。即上层代码定义接口,下层代码实现接口,使下层依赖于上层接口,降低了耦合度,提高了系统的灵活性。举个栗子:小霸王游戏机//如果用纯面向对象写classXiaobang{private$game;publicfunctionloadGame(){$this->game=new魂斗罗();$this->游戏->玩();}}class魂斗罗{publicfunctionplay(){//玩游戏}}$machine=new小霸王();$machine->loadGame();class小霸王{private$game;publicfunctionloadGame(){$this->game=newTank();$this->game->play();}}classTank{publicfunctionplay(){//玩游戏}}$reg=newXiaoBaWang();$reg->loadGame();使用依赖注入编写小霸王游戏机:插件卡带接口Game{publicfunctionplay();}classHunDouLuoimplementsGame{publicfunctionplay(){//玩魂斗罗}}classTankimplementsGame{publicfunctionplay(){//坦克大战}}classXiaoBaWang{private$game;公共函数__construct(游戏$game){$this->game=$game;}publicfunctionloadGame(){$this->game->play();}}$hunDouLuo=new魂斗罗();$tank=newTank();$machine=new小霸王($hunDouLuo);$machine->loadGame();$machine=new小霸王($tank);$machine->loadGame();上面的例子使用了“注入”的思想,就像注入一个类的实例注入另一个类的实例,需要什么就注入什么。当然,其中始终贯彻着“依赖倒置原则”。“注入”不仅可以通过构造函数注入,还可以通过属性注入。上面你可以通过一个“set”为属性“game”动态赋值。IoC容器开发有这样的经历,但是一开始类很少,逐渐功能越来越多,人越来越多,写了很多类。要使用这个类,必须先介绍那个类,而且必须保证顺序是正确的。然后。...出现这种情况,“a依赖b,b依赖c,c依赖d,d依赖e”,要得到'a'的实例,必须依次引入'e,d,c,b'然后实例化反过来。维护成本在上涨,开发成本在上涨,大家都在接手。再比如:如果游戏平台steam/battle没有游戏平台,几个小伙伴想联机玩魔兽,我们过去是怎么做到的?1.大家先一起下载相同版本的游戏2.安装驱动3.建立/进入局域网4.关闭防火墙5.建房间,进入房间,开始游戏想换成星际争霸,那么我们需要再做一遍上面的步骤。最后,我们玩游戏的动作取决于前面的许多步骤。如果一步出错,将需要很长时间才能正常启动游戏。Steam/对战游戏平台做了什么?当我们想在游戏平台一起玩游戏时,我们只需要:1.下载并安装游戏平台2.选择一款游戏,使用平台一键安装3.启动游戏这时候,如果我们要换一款游戏,只需要换游戏平台一键安装,然后开始游戏即可。您无需担心之前安装的游戏和启动游戏的过程对新游戏的影响。有了以上的思路,我们就可以搭建一个steam类和一个游戏类...
