Java设计模式
设计模式的定义
通俗的定义:设计模式是一套反复被人们使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且提高代码的可靠性。
GoF定义:设计模式是在特定环境下为解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用。
设计模式的基本要素
- 模式名称
- 问题
- 解决方案
- 效果
设计模式分类
1.根据目的分类
创建形:主要用于创建对象,GoF提供了5种分别是工厂方法模式、抽象工厂方法模式、建造者模式、原型模式和单例模式。
结构形:主要用于处理类和对象的组合,GoF提供了7种结构形模式,分别是适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
行为形:主要用于描述类或对象怎样交互和怎么取分配职责,GoF提供了11种模式,分别是职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
2.根据范围分类
类模式:类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时就被确定下来,是一种静态关系。
对象模式:对象模式处理对象间的关系,这些关系在运行时发生变化,更具动态性。
GoF设计模式简介
范围 / 目的 | 创建形模式 | 结构形模式 | 行为形模式 |
---|---|---|---|
类模式 | 工厂方法模式 | (类)适配器模式 | 解释器模式 / 模板方式模式 |
对象模式 | 抽象工厂模式、建造者模式、原型模式、单例模式 | (对象)适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式 | 职责链模式、命令模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、访问者模式 |
这23中设计模式并不是孤立存在的,很多模式之间存在联系,例如在访问者模式中操作对象结构中的元素时通常需要使用迭代器模式,在解释器模式中定义终结符表达式和非终结符表达式时可以使用组合模式;此外,还可以通过组合两个后者多个模式来设计一个系统,在充分发挥每一个模式的优势的同时使他们可以协同工作,完成一些更为复杂的设计工作。
设计模式的优点
- 设计模式是众多专家总结出来的经验,并且以一种标准的形式供广大开发者使用,这样就会方便不同语言开发者之间进行交流和沟通,并且降低开发人员理解系统的复杂度。
- 设计模式使得重用成功的设计更加容易,避免使用那些不可重用的设计方案。
- 设计模式使得设计方案更加灵活,且易于修改,所以JDK、Struts、Hibernate、JUnit等类库和框架中大量使用了设计模式。
- 提高系统的开发效率和软件质量,并且在一定程度上节约设计成本。
- 设计模式有助于初学者更加深入的理解面向对象思想,一方面可以帮助初学者更加方便的阅读和学习现有类库中的源代码,另一方面还可以提高软件的设计水平和代码质量。