1.单一职责原则:一个类只负责一件事
理解:不同的类具备不同的职责,各司其职。做系统设计是,如果发现有一个类拥有了两种职责,那么就要问一个问题:可以将这个类分成两个类吗?如果真的有必要,那就分开,千万不要让一个类干的事情太多。
总结:一个类只承担一个职责
2.依赖倒置原则:抽象不该依赖于具体实现,具体实现可以依赖抽象
理解:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
总结:面向接口编程,提取出事务的本质和共性。
3.开闭原则:对修改关闭,对扩展开放
理解:类、模块、函数,可以去扩展,但不要去修改。如果要修改代码,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码。当然,如果能保证对整个架构不会产生任何影响,那就没必要搞的那么复杂,直接改这个类吧。
总结:对软件实体的改动,最好用扩展而非修改的方式。
4.里氏替换原则:父类可以被子类无缝替换,且原有功能不受影响(例如:KVO)
理解:一个对象在其出现的任何地方,都可以用子类实例做替换,并且不会导致程序的错误。换句话说,当子类可以在任意地方替换基类且软件功能不受影响时,这种继承关系的建模才是合理的。
总结:子类可以扩展父类的方法,但不应该复写父类的方法。
5.接口隔离原则:使用多个专门的协议、而不是一个庞大臃肿的协议(例如:UITableViewDelegate,UITableViewDataSource)
理解:一个类实现的接口中,包含了它不需要的方法。将接口拆分成更小和更具体的接口,有助于解耦,从而更容易重构、更改。
总结:对象不应被强迫依赖它不使用的方法。
6.迪米特法则:一个对象应当对其他对象尽可能少的了解(高内聚、高耦合)
理解:一个对象对另一个对象了解得越多,那么,它们之间的耦合性也就越强,当修改其中一个对象时,对另一个对象造成的影响也就越大。
总结:一个对象应该对其他对象保持最少的了解,实现低耦合、高内聚。
7.组合/聚合复用原则:
理解:合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。
总结:就是说要少用继承,多用合成关系来实现。
继承复用有一定的缺点:比如如果基类发生了改变,那么派生类的的实现就不得不发生改变;而且从超类继承而来的实现是静态的,不可能在运行时发生改变,因此它的灵活性差并最终会限制复用性。
使用组合/聚合复用原则就解决了继承复用的缺点。
网友评论