使用界面实现开闭原理(SOLID)

时间:2019-01-01 18:21:26

标签: php oop design-patterns solid-principles open-closed-principle

我有多种付款方式(条带化,贝宝,PayUMoney等)。我想为每种付款类型创建一个单独的类,并创建一个付款接口,由此类实现,

interface PaymentInterface {
   public function payment($params);
}
class Stripe implements PaymentInterface {
   public function payment($params) { ... }
}

class Paypal implements PaymentInterface {
   public function payment($params) { ... }
}

我想从我的主要班级使用一种付款方式。我会将付款数据发送到我的主要方法,并希望动态检测付款方法。

class PaymentModule {
public function confirmPayment(Request $request){
   // create an object of the payment class
   // $obj = new PaymentTypeClass **(Problem is here)**
   // $obj->payment($params)
  }
}

我的问题在这里,如何动态创建相关的支付类/对象并从主方法调用 payment()方法?

如果我有条件地创建对象,那么我违反了开闭原则。因为,我正在使用 If ... else 检查付款类型,然后创建对象并调用 payment(),这可能需要进一步修改。

1 个答案:

答案 0 :(得分:4)

  

如果我有条件地创建对象,那么我违反了开闭原则。因为,我正在使用If ... else检查付款类型,然后创建对象并调用payment(),这可能需要进一步修改。

您的某些代码最终将不得不接受用户输入并决定要使用哪种付款方式。通常,这是使用factory object完成的,它可以使用if-else或地图或其他方式将正确的对象还给您,这是工厂的“单一责任”。