设计模式 · 第 9 题,共 12 题

一个结账服务通过 switch 选择支付方式,每新增一种支付方式都需要修改这个类。哪种重构符合开闭原则?

有 1 个正确答案。 中等

显示答案

答案

  • A 一个带有 #[AutoconfigureTag('myext.payment')] 的接口 PaymentProviderInterface,每种支付方式一个类,并在服务中使用 #[AutowireIterator('myext.payment')] iterable $providers

解析

策略模式把每种支付方式封装在各自的类中,并使用共同的接口。容器通过标签收集所有实现,服务逐一询问它们是否负责。新的支付方式(也包括来自其他扩展的)可以在不修改服务的情况下添加。提取出来的 switch 或一个汇总类仍然需要为每种新方式进行修改。

认证与考试

下一个考试是什么?

已有 19 项考试可以练习,21 项正在投票中。查看所有认证及官方信息,投出你的一票,或推荐你的考试。

查看全部认证