在软件开发中,前人总结了六大设计原则如下:
- Single Responsibility Principle:不能有多个导致类变更的原因。一个类中应该是一组相关性很高的函数、数据的封装。一个类只负责一个职责。这个原则不仅仅适用于类,对于接口和方法也适用,而且接口和方法的单一职责更容易实现。实际开发中,这是一个备受争议却又及其重要的原则。——单一职责原则
- Liskov Substitution Principle:就是只要父类出现的地方子类就可以出现,且替换成子类也不会出现任何错误或者异常;但是反过来,有子类出现的地方,父类不一定可以适用。也就是说,子类可以扩展父类的功能,但不能改变父类原有的功能。①子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。②子类可以有自己的个性,所以子类出现的地方父类就不一定适用。③实现父类的方法时,形参的类型可以被放大。④实现父类的方法时,返回值的类型可以缩小。通过里氏替换来达到对扩展开放,对修改关闭的效果。——里氏替换原则
- Dependence Inversion Principle:面向接口/抽象编程。①模块间的依赖关系通过接口和抽象类产生,实体类之间不直接发生依赖关系。②接口和抽象类不依赖于实现类。③实现类依赖接口或者抽象类。模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的。——依赖倒置原则
- Interface Segregation Principle:客户端不应该依赖它不需要的接口。接口/抽象中的方法尽量少。单一职责原则是按照职责(业务逻辑)进行划分接口的,而接口隔离原则则是按照实现类对方法的使用来划分的。可以说,接口隔离原则更细一些。①接口尽量小。根据具体业务把一个接口按照接口隔离原则细化成更多的接口。但是在此基础之上必须不能违背单一职责原则。②接口要高内聚。就是说,在接口内部实现的方法,不管怎么改,都不会影响到接口外的其他接口或是实现类,只能影响它自己。③定制服务。定制服务就是单独为一个个体提供服务,即只提供访问者需要的方法。④接口设计是有限度的。接口设计越小越好,但是结构同时会变得复杂,维护也变得难了。因此就要把握住这个度。——接口隔离原则
- Law of Demeter:也叫最少知道原则。一个对象应该对其他对象有最少的了解。低耦合、高内聚。——迪米特法则
- Open Closed Principle:软件中的对象(类、模块、函数等)应该对扩展开放,对修改关闭(勃兰特·梅耶认为,类只应该因错误而被修改)。也就是应该通过扩展来实现变化,而不是通过修改已有的代码来实现改变。例如,现在业务需求有改变,所有书均打七折。有三个方法可以解决这个问题:第一种方法:修改接口。增加一个方法getOffPrice专门进行打折处理。第二种方法:修改实现类,在实现类里修改getPrice方法。第三种方法:重新扩展一个类继承NovelBook,重新复写getPrice方法。根据对扩展开放对修改关闭原则我们应该选择第三种解决方法。但实际开发中,修改原有代码、扩展代码(通过继承的方式来升级、维护原有系统)往往是同时存在的。——开闭原则
这六大设计原则是以后学习设计模式的基础,它们的共同目的就是 SOLID ——建立稳定、灵活、健壮的设计。
参考:
【1】重构·改善既有代码的设计
【2】大话设计模式
【3】Android源码设计模式解析与实战