【设计模式】【 依赖注入】

本文探讨了面向对象设计中的依赖注入概念,通过司机开车的比喻,解释了高耦合度的问题及其解决方案。介绍了如何通过定义接口和实现类来降低耦合度,使代码更易于维护和扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、背景

现在有一个使用场景:司机开车

 

一般这样写

Public Driver{ //司机
    ...

    public void drive(){
        Car mCar=new Car(“汽车”);
        mCar.dianHuo();//点火
        mCar.guaDang();//挂档
        mCar.caiYouMen();//踩油门
        mCar.daFangXiang();//打方向

        ...
    }
}

2、问题

(1)耦合度高:Driver中创建和持有Car这个类,管理Car的生命周期

(2)不易维护: Car的通用性太强,无法细分汽车型号等等参数(比如自动挡和手动挡),以实现不同处理(不同汽车,点火,挂档,踩油门,打方向等等操作,各不相同)

 

3、解决思路

背景中的例子,实质是“开XX汽车的司机,开车”,核心是开XX车;司机不是重点;如何开车,司机依赖于车的属性。

所以,需要将司机的依赖对象车,注入到司机中,司机不需要自行引用车子,这个过程司机不需要关注。

 

4、具体方案

(1)Car公共属性接口

public interface ICar {
    public void dianHuo();//点火
    public void guaDang();//挂档
    public void caiYouMen();//踩油门
    public void daFangXiang();//打方向

    …
}

(2)不同的Car的类

宝马

public class BaoMa implements ICar {//宝马
    public void dianHuo()
    {
        …
    }
    public void guaDang()
    {
        …
    }
    public void caiYouMen()
    {
        …
    }
    public void daFangXiang()
    {
        …
    }
    …
}

法拉利

public class FaLaLi implements ICar {//法拉利
    public void dianHuo()
    {
        …
    }
    public void guaDang()
    {
        …
    }
    public void caiYouMen()
    {
        …
    }
    public void daFangXiang()
    {
        …
    }
    …
}

 

3、司机

Public Driver{
    private ICar mCar;

    public Driver(ICar onecar){
        mCar = onecar;
    }
    public void drive(){
        mCar.dianHuo();//点火;
        mCar.guaDang();//挂档;
        mCar.caiYouMen();//踩油门;
        mCar.daFangXiang();//打方向;
    }
    ...
}

4、具体实现

//开宝马的司机,开车
BaoMa baoMa=new BaoMa();
Driver mDriverByBaoMa=new Driver(baoMa);
mDriverByBaoMa.drive();

//开法拉利的司机,开车
FaLaLi faLaLi=new FaLaLi();
Driver mDriverByFaLaLi=new Driver(faLaLi);
mDriverByFaLaLi.drive();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值