小例子 理解 Laravel 依赖注入中依赖的含义
2

请先看一下 下面的代码
<?php

interface Visit
{
    public function go();
}

class Leg implements Visit       //行走接口
{
    public function go()
    {
        // TODO: Implement go() method.
        echo "walt to Tibet!!!";
    }
}

class Car implements Visit         //汽车接口
{
    public function go()
    {
        // TODO: Implement go() method.
        echo "drive car to Tibet!!!";
    }

}

class Train implements Visit        //火车接口
{
    public function go()
    {
        // TODO: Implement go() method.
        echo "go to Tibet by train";
    }
}

class Traveller                  // 旅行者类
{
    protected $trafficTool;

    public function __construct()
    {
        $this->trafficTool =new Leg();   // 产生依赖
    }

    public function visitTibet()
    {
        $this->trafficTool->go();
    }
}

$tra = new Traveller();

$tra->visitTibet();
  • 我们要实现的功能是旅游者去西藏,但是去西藏的方式有很多,走路、开车或者火车。不同的方式需要依靠不同的交通工具

  • 在古代交通基本靠走,通讯基本靠吼。所以旅游西藏的交通工具就是我们的大腿 Leg 所以我们在代码$this->trafficTool =new Leg(); 实例化了腿

  • 于是上述的两个组件就发生了依赖,因为我们去西藏旅行需要靠大腿走去

  • 在程序中依赖我们可以理解成为一个对象实现某个功能需要其它对象相关功能的支持

  • 但是我们使用 new 实例化对象解决了依赖,但是我们同时也引入的一个新的严重问题 耦合

  • 在古代走去西藏当然没毛病,但是现在21世纪交通工具这么发达,再走去西藏就真的很皮了

  • 所以这时我们选择做火车,毕竟有青藏铁路 。但是这时候我们就头大了,要改成做火车去西藏那么我们就要重写 Traveller 类 在里面实例化 Train 接口

  • 这代码也不知道是当初那个铁头娃写的,反正现在让我们的头很大

  • 而一个好的设计模式就可以解决这些问题,这在以后我们会继续介绍
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 1

期待后续解决方案。

4个月前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!