「撸一手好代码」设计模式之设计原则总结

「撸一手好代码」设计模式之设计原则总结

总结

概述

在这里插入图片描述

  • 开闭原则

功能添加通过扩展实现,而不是在原来的类上进行修改。

如:收银支付中不同支付方式的实现。规避if(...)...else if(...)...else...这种不断堆砌来实现。

  • 单一职责原则

每个类的功能单一。

如:用户操作类,就只有用户的增删改查等,用户权限作为另外一个类实现。

  • 接口隔离原则

在依赖接口时,只依赖需要的最小功能的接口。

该原则的实现的前提是单一职责。需要被依赖的接口遵循了单一职责原则,那么接口隔离也就可以实现的比较好,不然始终依赖的是一个大的功能接口。

  • 依赖倒置原则

依赖时,依赖接口而不依赖实现。

以上面收银支付为例,依赖一个支付接口而不是依赖各种具体的支付方式。

  • 合成复用原则

功能复用,通过组合来实现而不是继承。

譬如飞天狗狗,狗狗的特殊能力通过给狗狗添加一个特殊能力(属性)来实现而不是继承。

  • 迪米特法则

依赖其他的功能接口/类时,只需要知道直接依赖对象的信息。

  • 里氏替换原则

继承时,子类不能改变父类的功能。

小结

开闭原则可以认为是总则,依赖倒置原则是实现开闭的一个手段。在依赖倒置的实现上,需要单一职责和接口隔离来保证接口和实现的处理质量。在实现中,通过合成复用和迪米特法则来降低耦合度,提高灵活性。在实现过程中,如果使用了继承,那么必须遵循里氏替换原则来保证系统的健壮性。

实例

在这里插入图片描述

收银时,采用依赖倒置,依赖收费接口,而不是收费实现。

收银时进行账单处理,只依赖进行账单处理的服务,不依赖包括账单统计等一系列账单服务管理的服务,这便是接口隔离原则。

支付接口实现时,不同的支付方式进行扩展实现,而不是修改已有的代码,便是遵循了开闭原则。

收费实现依赖支付接口时,不用去管支付时使用的什么方式的接口,这便遵循了迪米特法则。

微信支付中,只有支付功能,没有账单查询等附加功能,便是单一职责。

在具体支付实现时,通过合成复用添加HttpClient请求客户端来实现功能复用,而不是微信/支付宝支付通过继承RestClient/SoapClient来实现。

在请求客户端实现时,RestClient/SoapClient使用了继承,这边需要遵循里氏替换原则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FoolRabbit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值