1.定义:
开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
2.例子
功能:现在已有一个调用第三方接口发布内容的功能,
现状:已经有了微信的发布,新添加抖音的发布.
处理示例:在接口的返回处的处理.
解释:
开闭原则下不应该影响都原有模块就能扩展功能,
main()的代码可以做到在新加一个渠道的情况下对修改关闭.
我理解开闭原则是强调对已有模型(处理逻辑)的保护,现有的逻辑已经是可靠的了,不动.新的进来只影响新的,你想想是不是就bug少了.
下面的例子就是抖音你处理有问题,但是原有的微信处理还能正常.这是版本迭代的风险就小了.
/** * 具体返回值抽象类 * */ abstract class AResult { /** * @var Array 原始返回值 * */ protected $ors; function __construct(array $ors) { $this->ors = $ors; } /** * @return bool true|false 本次发送成功|失败 * */ abstract function isSuccess(): bool; } /** * 微信的返回 * */ class Wx extends AResult { function isSuccess() : bool { //根据$this->>ors判断 return true; } } /** * 抖音的返回 * */ class Douyin extends AResult { function isSuccess() : bool { //根据$this->>ors判断 //throw new \Exception('我写错了,有bug'); return true; } } /** * 调用方的主逻辑 * */ function main() { //调用发布 api,content的实例可以使用依赖注入 //$content = new Content($contentData); //$rs = $api->publish($content); //返回的处理是通用的逻辑 if($rs ->isSuccess()){ //发布成功 }else{ //发布失败 } }