# 设计模式有什么?设计模式简介

# 设计模式的组成

单个设计模式 在描述一个设计模式的时候,通常会有如下部分:

  1. 模式名称:就是为每个设计模式取个名字,好记忆,也好交流
  2. 环境和问题:描述在什么场景下,出现什么样的特定的问题
  3. 解决方案:描述如何解决这个问题
  4. 效果:描述模式的效果,以及可能带来的问题,或则使用中需要权衡的问题

按照设计模式所在的技术领域来划分

  1. java设计模式:通常指Gof的《设计模式---可复用面向对象软件的基础》一书中提到的设计模式
  2. j2ee设计模式:通常指SUN的《J2EE核心设计模式》一书中提到的设计模式
  3. 其他领域的,包括但不限于:EJB设计模式,实时系统设计模式,多线程设计模式、架构模式等等

# 设计模式的分类

仅对gof的23个设计模式进行分为三类

  1. 创建型模式:抽象了对象实例化的过程,用来帮助创建对象的实例
  2. 结构型模式:描述如何组合类和对象以获得更大的结构
  3. 行为型模式:描述算法和对象间职责的分配

# 设计模式和面向对象设计原则:

面向对象的分析设计有很多原则,这些原则大都从思想层面,给我们指出了面向对象分析设计的正确方向,是我们进行面向对象分析设计应该尽力遵守的准则。

而设计模式已经是针对某个场景下某些问题的某个解决方案,也就是说这些 设计原则是思想上的指导,而设计模式是实现上的手段,因此设计模式也是应该遵守这些原则的,换句话说,设计模式就是这些设计原则的一些具体体现


# 为何不重点讲述面向对象设计原则:

  1. 设计原则本身是从思想层面上进行指导,本身是高度概括和原则性的,只是一个设计上的大体方向,其具体实现并不是只有设计模式这一种。理论上来说,可以在相同原则指导下,做出很多不同的实现来。
  2. 每一种设计模式并不是单一的实现某一个设计原则,事实上,很多设计模式都是熔合了很多个设计原则的思想,并不好特别强调设计模式对某个或则是某些设计原则的体现,而且每个设计模式在应用的时候也会有很多的考量,不同使用场景下,突出体现的设计原则也可能是不一样的。
  3. 这些设计原则只是一个建议指导,事实上,在实际开发中,很少做到完全遵守,总是在有意无意的违反 或则部分设计原则。设计工作本来就是一个不断权衡的工作,有句话说得很好:“设计是一种危险的平衡艺术”,设计原则只是一个指导,有些时候,还要中和考虑业务功能、实现的难度、系统性能、时间与空间等很多方面的问题
  4. 设计模式本身已经很复杂了,在一本书里面很难再去深入的探讨这些设计原则,这样避免出现过多的重点内容,导致大家无所适从

# 设计模式和UML

  1. UML是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示
  2. 设计模式和UML本身没有任何联系
  3. 可以使用UML来图形化表示设计模式的:设计结构、调用顺序等,方便交流
  4. 完全可以不使用UML,可以使用任何易于交流和表达的方式来表示设计模式的:设计结构、调用顺序等

# 设计模式和设计工具

  1. 设计模式重在设计、重在思想、重在解决方案,跟使用什么样的设计工具,没有任何关系
  2. 使用设计工具,能有效的帮助我们去表达应用设计模式设计出来的成果,并对这些成功进行管理和维护
  3. 完全可以不使用任何设计工具

# 设计模式和重构:

  1. 设计模式是重构的目标,重构是达到目标的手段(之一)
  2. 重构并不排斥提前设计,重构并不是不需要设计(避免过度设计
  3. 合理的提前设计(主要手段) + 重构来不断的改进设计(辅助手段) ==》 趋近与优秀的系统