DependencyInversionPrinciple - marmot-cn/marmot-framework GitHub Wiki

依赖倒置原则(DIP)

概述

高层模块不应该依赖低层模块,应依赖抽象而非具体。从而降低高层模块与低层模块的耦合,通过面向接口编程,进行解耦。

示例

当用户在支付订单时,原来只支持微信支付,新的需求希望让用户可以有多种支付方式选择,比如可以选择支付宝支付或银联支付。对此,我们可以对支付方式进行抽象:

  • 微信支付
  • 支付宝支付
  • 银联支付
class Order
{
    public function pay(IPayMode $payMode) : bool
    {
        return $payMode->pay();
    }
}

interface IPayMode
{
    public function pay() : bool;
}

class WeChatPayMode implements IPayMode
{
    public function pay() : bool
    {
        # code...
    }
}

class AliPayMode implements IPayMode
{
    public function pay() : bool
    {
        # code...
    }
}

class UnionPayMode implements IPayMode
{
    public function pay() : bool
    {
        # code...
    }
}

此处,Order是高层模块,WeChatPayMode是低层模块,他们之间通过IPayMode进行解耦。