设计模式是一套理论与经验,它可以提高代码的可重用性、可维护性。比如需求经常变,实现模块之间的松耦合就可以方便维护。
依赖倒置原则
依赖倒置原则,简单说就是面向接口编程。可以减少类间的耦合性,有利于并行开发。
设想这样一个场景:甲负责汽车类的建造,乙负责司机类的建造。在甲没有完成的情况下,乙是不能完全地编写代码的,缺少汽车类,编译器根本就不会让你通过!
两个类之间有依赖关系,只要制定出两者之间的接口(或抽象类)就可以独立开发了,而且项目之间的单元测试也可以独立地运行。
抽象是对实现的约束,对依赖者而言,也是一种契约,不仅仅约束自己,还同时约束自己与外部的关系,其目的是保证所有细节的发展不脱离既定契约。
单例模式
确保某一个类只有一个实例。当一个对象需要频繁地创建、销毁时,单利模式就有优势。
工厂模式
什么是工厂方法模式?定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需依赖工厂即可得到自己想要的产品。
适配器模式
将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
Target 目标角色。该角色定义把其他类转换为何种接口,也就是我们的期望接口,例子中的 IUserInfo 接口就是目标角色。
Adaptee 源角色。你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。
Adapter 适配器角色。把源角色转换为目标角色,怎么转换?通过继承或是类关联的方式。
缺省适配器模式
缺省适配模式为一个接口提供缺省实现(本例中接口InterfaceA的缺省实现是AbstractClassB),这样,子类型可以从这个缺省实现(AbstractClassB)进行扩展,而不必从原有接口进行扩展。当原接口中定义的方法太多,而其中大部分又不被需要时,这种模式非常实用。
代理模式
通过代理对象来操作被代理对象,扩展或改变原有功能。
观察者模式
检测到被观察对象的状态发生改变时,通知相关的类或对象。
备忘录模式
存储某个对象某个时刻的所有内容,也叫做为对象创建快照。
迭代器模式
可以方便地遍历对象的集合。java中的iteratable接口就是这种设计模式。