0
点赞
收藏
分享

微信扫一扫

【设计模式】最快理解设计模式的几大原则

设计模式的真正境界,就是看懂,然后忘记。

单一职责原则

只干一件事。

这个粒度越小,就越好复用,重复代码就越少,但是代码量也越多,需要自己权衡。

里氏替换原则

子类可以扩展父类的功能,但不能改变父类原有的功能。

可以尽量减少重复作用的类,也防止调用父子类同名方法造成不同的效果。

问题:继承的层级过多,子类会很庞大,如果并不需要用父类的方法, 就很冗余。

例子:


父亲会移动,用的腿。儿子也会移动,用的车。
调用者想用腿走,但是调用儿子的移动,就会有问题。
所以要儿子实现开车方法,让调用者自己选择。


开闭原则

写新代码不改老代码。

使用抽象类,让不同的人实现不同的效果,实现扩展。

例子:


抽象类 移动
类A 实现 移动 用腿
扩展
类B 实现 移动 用自行车
调用者 自由选择A或者B


依赖倒置原则

要面向接口编程,不要面向实现编程。

使用接口类,让不同的人实现不同的,但是效果一致。

调用者调用的是接口,并不用关心实现,效果都一致。

例子:


接口类 购物方式
类A 实现 购物方式 上淘宝
类B 实现 购物方式 上京东


购物类 初始化注入购物方式类

调用者 选择不同的购物方式类注入,然后使用购物类

接口隔离原则

减少接口依赖

提供更符合需求,更具体的接口。也就是结合业务进行封装。

例子:


套餐。
用户可以点牛排、面包、面条、花椰菜、玉米。
但是所有这些都放到一个接口类里面,就很多。
可以提供,主食类、肉类、汤类。
或者 儿童套餐,双人套餐,家庭套餐。
主要是结合场景对小接口进行归类和整合。


迪米特法则

避免直接调用或直接通信。

也叫层次依赖。

从依赖者的角度来说,只依赖应该依赖的对象。

从被依赖者的角度说,只暴露应该暴露的方法。

例子:


手机类 APP类 内容类
内容类就只用依赖APP,而不用依赖手机。


还有种理解,增加了调用者负担。

也叫增加了API表面积,就是尽量让调用者少关注实现逻辑

例子:


一个错误处理方法,有几种错误类型。
第一种写法就是提供一个类,然后你根据类内的错误类型进行判断。这样一旦类型修改了就要改调用者的代码。
第二种写法就是提供一个校验的方法,你只用调用这个方法就知道是不是错误,或者是什么错误。


合成复用原则

少用继承,多用组合

就是将代码分成块A、块B、C..

然后制造积木1就是包含以下A和B,积木2可能就是BCD。自由组合,更灵活。

总结

Go语言还是厉害的。

直接没有继承,只有结构体和包,这不就是一块一块么?

也没有纯虚类,只有接口,直接就是面向接口编程。

看完就忘掉这几个法则把,只要记住应该怎么做就好了,什么是对,什么是错,我反正是不记得什么原则对应什么的,只记得应该这样和为什么要这样。

当你停下来休息的时候,不要忘记别人还在奔跑!




举报

相关推荐

0 条评论