OpenClosedPrinciple - marmot-cn/marmot-framework GitHub Wiki
开放封闭原则(OCP)
概述
- 实体应该对扩展开放,对修改封闭。即可扩展,不可修改
- 对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况;
- 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。
示例
当用户在支付订单时,原来只支持微信支付,新的需求希望让用户可以有多种支付方式选择,比如可以选择支付宝支付或银联支付。对此,我们可以对支付方式进行抽象:
- 微信支付
- 支付宝支付
- 银联支付
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...
}
}