iOS开发——六大设计原则

一、单一职责原则(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

你可能感兴趣的:(iOS开发——六大设计原则)