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
进行解耦。