依赖注入

更新于 阅读 3

依赖注入在程序编写中常用于解决耦合问题,减少代码的复杂性,。

在电商网站上买东西,下完单后就需要支付,可以选择微信、支付宝、信用卡等方式。最开始只有微信支付。

class Order { // 微信支付 wechatPay() { new WeChatPay().pay(); } }

一段时间之后需要接入支付宝、信用卡。每新增一种支付方式就需要在里面加一个对应的方法。这样代码的灵活性就不高。而且Order强耦合了所有的支付方式。Order类依赖了WechatPay类、Alipay类、CreditCard类。

class Order { // 微信支付 wechatPay() { new WechatPay().pay(); } // 支付宝 alipay() { new Alipay().pay(); } // 信用卡 crditCard() { new CreditCard().pay(); } }

那么可不可以解除这种依赖关系,将Order对其他类的控制权交给第三方呢,依赖注入可以实现,将支付方式交给第三方注入到Order类中,Order只需要调用需要的方法即可。

class Order { constructor({payMethod}) { this._payMethod = payMethod; } pay() { this._payMethod.pay(); } } function getMethodPay (name) { return { wechatPay: new WechatPay(), alipay: new Alipay(), crditCard: new CreditCard() }[name]; } const order = new Order({ payMethod: getMethodPay("wechatPay") }) order.pay();

先找到需要的支付方式,传入到Order中,Order不关心传入的是哪种支付方式,只需要调用对用的支付方法即可。