一、设计模式
设计模式是一套被反复使用的、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被人理解、保证代码可靠性。二、原则
1.单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。即一个类只负责一项职责。
分别建立两个类,是类一完成职责1的功能,类二完成职责2的功能,当修改类一时,不会使职责2发生故障风险,同理,修改类二时,不会使职责1发生故障风险。即不要让一个类承担过多的职责,过多的职责就相当于耦合,会导致一个职责的改变会降低或抑制类完成其他职责的能力。
2.里氏替换原则:
一个基类可以替换成它的子类对象,程序不会产生任何错苏和异常,反之则不成立。而里氏替换原则指,在程序中尽量使用基类类型来对对象进行定义,运行时再确定其子类类型,用子类对象来替换父类对象。
一个软件实体如果使用的是一个父类的话,那么一定适用于其父类,而且它察觉不出父类对象和子类对象的区别。也就是说,在软件里面,把父类都替换成它的子类,程序的行为没有变化。只有当子类可以替换掉父类,软件单位不收到影响时,父类才能真正地被复用,而子类也能够在父类的基础上增加新的行为。
子类可以扩展父类的功能,但不能改变父类原有的功能。即:• 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
• 子类中可以增加自己特有的方法。
• 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
• 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
3.开放—封闭原则
软件实体(类、模块、函数等等)应该可以扩展,但是不可修改你设计的时候,时刻要考虑,尽量让这个类是足够好,写好了就不要去修改了,如果新需求来,我们增加一些类就完事了,原来的代码能不动则不动。这个原则有两个特性,一个是说“对于扩展是开放的”,另一个是说“对于更改是封闭的”。面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。这就是“开放-封闭原则”的精神所在
4.依赖倒转原则
高层模块不应该依赖低层模块。两个都应该依赖抽象。抽象不应该依赖细节。细节应该依赖抽象。抽象指接口或抽象类,细节指实现类,实现接口、关键字new产生的对象。高层模块是调用端,低层模块是具体实现类。模块间通过抽象发生,实现类之间不发生直接依赖关系,其依赖关系是通过接口或者抽象类产生的。如果类与类直接依赖细节,那么就会直接耦合,那么当修改时,就会同时修改依赖者代码,这样限制了可扩展性。
5.迪米特法则
一个对象应该对其他对象保持最少的了解,减低类之间的耦合度。在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。
6.接口隔离原则
客户端不应该依赖它不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上。
建立单一接口,不要建立庞大臃肿的接口,尽量细化接口,接口中的方法尽量少。也就是说,我们要为各个类建立专用的接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。