一、设计模式的目的
设计模式是为了更好的代码重用性,可读性,可靠性,可维护性,可扩展形。
二、设计模式的原则
开闭原则:对扩展开放,对修改关闭
注解:一段程序应该尽量保持在对扩展友好,但是尽量不修改原有的逻辑。
依赖倒转原则:高层模块不应该依赖底层模块,它们都应该依赖抽象;要针对抽象层编程,而不要针对具体类编程。
注解:抽象指的是接口或抽象类,细节就是具体的实现类,使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成。
单一职责原则:类的职责要单一,不能将太多的职责放在一个类中。
注解:一个类应该只负责一项职责,应该只有一个引起它变化的原因。如果类处理比较少的逻辑,可以调整成一类问题的逻辑职责。
里氏代换原则:使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
注解:在使用继承时,遵循里氏替换原则,在子类中尽量不要重写和重载父类的方法。这是因为用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障
合成复用原则:指在一个新的对象里通过组合、聚合关系来使用一些已有的对象,使之成为新对象的一部分;新对象通过调用已有对象的方法达到复用其已有功能的目的。
简言之:要尽量使用组合/聚合关系,少用继承。
迪米特原则:又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public 方法,不对外泄露任何信息。
注解:也可以定义为:一个软件实体应当尽可能少地与其他实体发生相互作用
接口隔离原则:指使用多个专门的接口,而不使用单一的总接口。 一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。
注解:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。