加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

深入理解依赖注入是如何达成解耦

发布时间:2022-07-29 14:43:15 所属栏目:PHP教程 来源:互联网
导读:第一章:小明和他的手机 从前有个人叫小明 小明有三大爱好,抽烟,喝酒 咳咳,不好意思,走错片场了。应该是逛知乎、玩王者农药和抢微信红包 微信截图_20200520095842.png 小明的三大爱好 我们用一段简单的伪代码,来制造一个这样的小明 private $_name; pri
    第一章:小明和他的手机
 
    从前有个人叫小明
 
    小明有三大爱好,抽烟,喝酒…… 咳咳,不好意思,走错片场了。应该是逛知乎、玩王者农药和抢微信红包
 
    微信截图_20200520095842.png
 
    小明的三大爱好
 
    我们用一段简单的伪代码,来制造一个这样的小明
 
  
        private $_name;
 
        private $_age;
 
        function read()
 
        {
 
            //逛知乎
 
        }
 
        function  play()
 
        {
 
            //玩农药
 
        }
 
        function  grab()
 
        {
 
            //抢红包
 
        }
 
    }
 
    但是,小明作为一个人类,没有办法仅靠自己就能实现以上的功能,他必须依赖一部手机,所以他买了一台iphone6,接下来我们来制造一个iphone6
 
  
        function read($user="某人")
 
        {
 
            echo $user."打开了知乎然后编了一个故事 n";
 
        }
 
        function play($user="某人")
 
        {
 
            echo $user."打开了王者农药并送起了人头 n";
 
        }
 
        function grab($user="某人")
 
        {
 
            echo $user."开始抢红包却只抢不发 n";
 
        }
 
    }
 
    小明非常珍惜自己的新手机,每天把它牢牢控制在手心里,所以小明变成了这个样子
 
  
    {
 
        private $_name;
 
        private $_age;
 
        public function  __construct()
 
        {
 
            $this->_name = '小明';
 
            $this->_age = 26;
 
        }
 
        function read()
 
        {
 
            //……  省略若干代码
 
            (new iPhone6())->read($this->_name); //逛知乎
 
        }
 
        function  play()
 
        {
 
            //……  省略若干代码
 
            (new iPhone6())->play($this->_name);//玩农药
 
        }
 
        function  grab()
 
        {
 
            //……  省略若干代码
 
            (new iPhone6())->grab($this->_name);//抢红包
 
        }
 
    }
 
    今天是周六,小明不用上班,于是他起床,并依次逛起了知乎,玩王者农药,并抢了个红包。
 
 
 
 
 
    $ming = new Ming();  //小明起床
 
    $ming->read();
 
    $ming->play();
 
    $ming->grab();
 
    这个时候,我们可以在命令行里看到输出如下
 
    小明打开了知乎然后编了一个故事
 
    小明打开了王者农药并送起了人头
 
    小明开始抢红包却只抢不发
 
    这一天,小明过得很充实,他觉得自己是世界上最幸福的人。
 
    第二章: 小明的快乐与忧伤
 
    小明和他的手机曾一起度过了一段美好的时光,一到空闲时刻,他就抱着手机,逛知乎,刷微博,玩游戏,他觉得自己根本不需要女朋友,只要有手机在身边,就满足了。
 
    可谁能想到,一次次地系统更新彻底打碎了他的梦想,他的手机变得越来越卡顿,电池的使用寿命也越来越短,一直到某一天的寒风中,他的手机终于耐不住寒冷,头也不回地关了机。
 
    小明很忧伤,他意识到,自己要换手机了。
 
    为了能获得更好的使用体验,小明一咬牙,剁手了一台iphoneX,这部手机铃声很大,电量很足,还能双卡双待,小明很喜欢,但是他遇到一个问题,就是他之前过度依赖了原来那一部iPhone6,他们之间已经深深耦合在一起了,如果要换手机,他就要拿起刀来改造自己,把自己体内所有方法中的iphone6 都换成 iphoneX。
 
    漫长的改造过程
 
    经历了漫长的改造过程,小明终于把代码中的 iphone6 全部换成了 iphoneX。虽然很辛苦,但是小明觉得他是快乐的。
 
    于是小明开开心心地带着手机去上班了,并在回来的路上被小偷偷走了。为了应急,小明只好重新使用那部刚刚被遗弃的iphone6,但是一想到那漫长的改造过程,小明的心里就说不出的委屈,他觉得自己过于依赖手机了,为什么每次手机出什么问题他都要去改造他自己,这不仅仅是过度耦合,简直是本末倒置,他向天空大喊,我不要再控制我的手机了。
 
    天空中的造物主,也就是作为程序员的我,听到了他的呐喊,我告诉他,你不用再控制你的手机了,交给我来管理,把控制权交给我。这就叫做控制反转。
 
    第三章:造物主的智慧
 
    小明听到了我的话,他既高兴,又有一点害怕,他跪下来磕了几个头,虔诚地说到:“原来您就是传说中的造物主,巴格梅克上神。我听到您刚刚说了 控制反转 四个字,就是把手机的控制权从我的手里交给你,但这只是您的想法,是一种思想罢了,要用什么办法才能实现控制反转,又可以让我继续使用手机呢?”
 
    “呵“,身为造物主的我在表现完不屑以后,扔下了四个大字,“依赖注入!”
 
    接下来,伟大的我开始对小明进行惨无人道的改造,如下
 
  
 
    class Ming extends Person
 
    {
 
        private $_name;
 
        private $_age;
 
        private $_phone; //将手机作为自己的成员变量
 
        public function  __construct($phone)
 
        {
 
            $this->_name = '小明';
 
            $this->_age = 26;
 
            $this->_phone = $phone;
 
            echo "小明起床了 n";
 
        }
 
        function read()
 
        {
 
            //……  省略若干代码
 
            $this->_phone->read($this->_name); //逛知乎
 
        }
 
        function  play()
 
        {
 
            //……  省略若干代码
 
            $this->_phone->play($this->_name);//玩农药
  

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读