设计模式学习过程中,参考了刘伟老师的技术博客(https://blog.csdn.net/LoveLion/article/category/738450/2?),在学习的过程中也加入了自己的理解,目前逐步更新,内容为设计模式的六大原则和二十四个java项目常用设计模式。
模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。这些方案能够快速的帮我们解决一些重复出现的问题,避免重复性工作,设计出高效的、扩展性好的系统。在学习的过程中需要注意的是,模式并不是死板的孤立存在的,实际使用过程中一个模式一般都会和其他模式配合完成功能,应该根据具体业务和代码对选择合适的模式。
一、设计模式的基本原则
- 面向对象的开闭原则:对扩展开放,对修改关闭,功能应该在不修改原代码的基础上进行扩展。为了满足开闭原则,需要对系统进行抽象化,抽象化是开闭原则的关键。
- 里氏代换原则:所有依赖其父类功能的地方,都适用于它的子类,且不会有任何错误和异常。在程序中尽量使用基类对对象进行定义,在运行时在确定其子类类型,用子类来代替基类。
- 依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象。绝体解释为面向接口编程,而不是针对实现编程。依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段
- 接口隔离原则:使用多个专门的接口,而不使用单一的接口,客户端不应该依赖那些它不需要的接口。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
- 合成复用原则:尽量使用组合,而不是使用继承来达到复用的目的。通过组合/聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少
- 迪米特法则:一个软件实体应尽量少的与其他软件实体发生相互作用。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。
- 单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整封装在一个类中。
二、java常用的实际模式及分类
根据设计模式的目的,可以分为创建型、结构型、行为型三大类。创建型主要用于创建对象,结构型主要用于处理类或对象的组合,行为型主要用于描述类或对象怎样交互和怎样分配职责。