一、单一职责原则(Single Responsibility Principle)
一个类只做一件事
-
CALayer
:动画和视图的显示。 -
UIView
: 只负责事件传递、事件响应。
未实现单一职能原则
实现了单一职能原则
二、开放封闭原则(Open Close Principle)
- 对修改关闭(不修改父类),对扩展开放(通过继承实现扩展)
- 新增功能用
extension
,category
未实现开闭原则
实现了开闭原则
三、里氏替换原则(Liskov Substitution Principle)
所有引用基类的地方必须能透明地使用其子类的对象,也就是说子类对象可以替换其父类对象,而程序执行效果不变。
四、依赖倒置原则(Dependence Inversion Principle)
- 依赖抽象,而不是依赖实现。
- 抽象不应该依赖细节;细节应该依赖抽象。
- 高层模块不能依赖低层模块,二者都应该依赖抽象。
五、 接口隔离原则(InterfaceSegregation Principles)
使用多个专门的协议,而不是一个庞大臃肿的协议
-
UITableViewDelegate
:含有的方法是UITableView的实例告知其代理一些点击事件的方法,即事件的传递,方向是从UITableView的实例到其代理。 -
UITableViewDataSource
:含有的方法是UITableView的代理传给UITableView一些必要数据供UITableView展示出来,即数据的传递,方向是从UITableView的代理到UITableView。
六、 迪米特原则(Law of Demeter)也称最少知识原则
- 迪米特法则也叫做最少知道原则(Least Know Principle), 一个类应该只和它的成员变量,方法的输入,返回参数中的类作交流,而不应该引入其他的类(间接交流)。
不好的设计
好的设计
两种设计不同之处在于,在客户端里面,没有引入GasEngine类,而是直接通过Car实例获取到了需要的数据。
这样设计的好处是,如果这辆车的引擎换成了电动引擎(原来的GasEngine类换成了ElectricEngine类),客户端代码可以不做任何修改!因为它没有引入任何引擎类,而是直接获取了引擎的品牌名称。
所以在这种情况下我们只需要修改Car类的usingEngineBrandName方法实现,将新引擎的品牌名称返回即可。
作者:zyl409214686
链接:https://juejin.im/post/6844903545561432077
作者:J_Knight_
链接:https://juejin.im/post/6844903673672237063