模式名 | 实践 | 原则 |
---|---|---|
单例模式 | 比较简单,应用广泛,如Spring | 待补充 |
工厂方法模式 | 使用非常频繁,可与模板方法模式、单例模式、原型模式混合使用 | |
抽象工厂模式 | 使用场景很多 | |
模板方法模式 | 一些开源框架应用很多,提供一个抽象类,然后开源框架谢了一堆子类。如果需要扩展功能,可以继承这个抽象类,然后覆写protected方法,然后调用一个类似execute方法,就完成了扩展开发 | |
建造者模式 | 和模板方法模式结合用 | |
代理模式 | 应用非常广泛,大到系统架构、企业平台,小到代码片段、事务处理。如Spring AOP和AspectJ | |
原型模式 | 一般与工厂方法模式结合用,Java已经与原型模式融合一体,可以直接拿来使用,如clone方法。 | |
中介者模式 | MVC框架 | |
命令模式 | 比较简单,在项目中使用频繁,关注解耦 | |
责任链模式 | 在项目中使用非常多。将请求与处理分开。 | |
装饰模式 | 是继承的替代方案。继承是静态地给类增加功能,而装饰者模式是动态地增加功能。扩展性非常好 | |
策略模式 | 非常简单,在项目中使用非常多。定义封装算法,和工厂方法模式结合用。 | |
适配器模式 | 补偿模式,在开发设计阶段不需考虑它。 | |
迭代器模式 | Java开发不需要自己写迭代器模式,使用Java提供的Iterator即可 | |
组合模式 | 树形结构,体现局部与整体的关系的,考虑使用。 | |
观察者模式 | 项目中很常见,也叫发布订阅模式。java.util.Observable类和java.util.Observer接口 | |
门面模式 | 子系统负责,如算法和业务复杂,或者对于一个大项目,为了避免不同水平开发人员带来的风险,可使用 | |
备忘录模式 | 可回滚、事务管理用的就是备忘录模式。在程序中使用该模式,不再使用数据库的临时表作为缓存备份数据,这可以减少数据库操作的压力。 | |
访问者模式 | 使用于大规划重构的项目,需求非常清晰,为达到最终目的功能集中化,如统一的报表运算、UI展现、过滤器和拦截器等 | A1 C0 E0 |
状态模式 | 权限设计、工作流开发,与建造模式结合用 | A1 E1 F1 |
解释器模式 | 实际的系统开发中用的非常少。存在效率、性能和维护的问题。尽量不要在重要的模块中使用。在一些大中型的框架型项目存在,如一些数据分析工具、报表设计工具、科学计算工具,工具包:Expression4J、MESP、Jep等 | |
享元模式 | 池技术的重要实现方式,Java API中随处可见,String类的intern方法。存在线程安全问题 | |
桥梁模式 | 非常简单的模式,可解决继承有N层的问题 |
备注:
A:单一职责原则:A1指符合该模式,A0指不符合。
B:里氏替换原则:
C:依赖倒置原则:
D:接口隔离原则:
E:迪米特法则:
F:开闭原则: