12.1.单一职责原则
一个类只负责一件事情或者一类事情。比如
CALayer
专门负责动画和视图的展示,UIView
负责事件传递和事件相应。
12.2.开闭原则
对修改关闭、对扩展开放。比如我们有多种支付方式,如果我们把他们都写在一个
pay:
方法里面,用 if 做标记逻辑判断,那么我们每次新增一种支付方式,就得改写pay:
方法,这样就扩展性差,新代码容易导致旧的代码出错。比较好的方式是,把各种 pay 方法分开来,比如aliPay: wechatPay:
,这样新增支付手段的时候,就只需要增加xxxPay:
方法,这就是对修改关闭,对扩展开放的原则。
12.3.里氏替换原则
父类可以被子类无缝替换,且原有功能不受影响。回忆我们在 OC 特性里面说的到的 KVO,当我们调用
addObserver
的时候,系统会在动态运行时替我们生成一个子类,并且对于我们使用者来讲,使用的还是原有的类,原有功能的类并未受到任何影响,但实际上已经被系统悄无声息的换成了子类。所以说 KVO 不仅使用了观察者模式
,还遵从了里式替换原则
。
12.4.接口隔离原则
使用多个专门的协议、而不是一个庞大臃肿的协议;协议中的方法应该尽量少。比如说我们常用的系统提供的
UITableView
,一个叫做delegate
协议,一个叫做dataSource
协议。
12.5.依赖倒置原则
抽象不应该依赖具体实现,具体实现可以依赖于抽象。比如说增删改查这些接口方法,所有的上层的业务调用,都应该依赖于你所定义的这种抽象的接口。而至于接口内部的具体实现,是用数据库也好,是用文件,是用 pList,以及用 UserDefault,对上层业务来说应该是感知不到的,这就体现了利用抽象接口反转依赖。
12.6.迪米特法则
一个对象应当对其他对象有尽可能少的了解。高内聚、低耦合。
以上前面五中被称为面向对象设计中常用的 SOLID原则
。
网友评论